You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(135) |
Nov
(123) |
Dec
(83) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(244) |
Feb
(72) |
Mar
(221) |
Apr
(91) |
May
(104) |
Jun
(93) |
Jul
(78) |
Aug
(1) |
Sep
(1) |
Oct
(29) |
Nov
(98) |
Dec
(20) |
2003 |
Jan
|
Feb
(21) |
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
(18) |
Sep
(18) |
Oct
(23) |
Nov
(12) |
Dec
(6) |
2004 |
Jan
(2) |
Feb
(32) |
Mar
|
Apr
(12) |
May
(11) |
Jun
(11) |
Jul
|
Aug
(9) |
Sep
|
Oct
(15) |
Nov
|
Dec
|
2005 |
Jan
|
Feb
(2) |
Mar
(11) |
Apr
(6) |
May
(1) |
Jun
(9) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2006 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2007 |
Jan
|
Feb
(2) |
Mar
|
Apr
(25) |
May
(2) |
Jun
|
Jul
(5) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(13) |
Oct
|
Nov
(2) |
Dec
(2) |
2011 |
Jan
|
Feb
|
Mar
(10) |
Apr
(10) |
May
(1) |
Jun
(6) |
Jul
|
Aug
(2) |
Sep
(5) |
Oct
|
Nov
|
Dec
|
From: johann d. <jd...@us...> - 2002-04-17 19:28:21
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/i386 In directory usw-pr-cvs1:/tmp/cvs-serv3588/arch/i386 Modified Files: config.in Log Message: Fixed a bug that would make APM options appear when CONFIG_PM and CONFIG_APM are set to "n". Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/i386/config.in,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- config.in 16 Apr 2002 17:41:47 -0000 1.37 +++ config.in 17 Apr 2002 19:28:17 -0000 1.38 @@ -274,7 +274,7 @@ bool 'Power Management support' CONFIG_PM dep_tristate ' Advanced Power Management BIOS support' CONFIG_APM $CONFIG_PM -if [ "$CONFIG_APM" != "n" ]; then +if [ "$CONFIG_PM" != "n" -a "$CONFIG_APM" != "n" ]; then bool ' Ignore USER SUSPEND' CONFIG_APM_IGNORE_USER_SUSPEND bool ' Enable PM at boot time' CONFIG_APM_DO_ENABLE bool ' Make CPU Idle calls when idle' CONFIG_APM_CPU_IDLE |
From: James S. <jsi...@us...> - 2002-04-16 19:45:20
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/paper In directory usw-pr-cvs1:/tmp/cvs-serv25371 Modified Files: fbdev.html serial.html Log Message: Paper updates. Adding info on new fbdev api. Needs alot of work. Index: fbdev.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/paper/fbdev.html,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- fbdev.html 15 Apr 2002 23:34:10 -0000 1.2 +++ fbdev.html 16 Apr 2002 19:45:13 -0000 1.3 @@ -57,11 +57,47 @@ </H2> <P> + If you look at the current framebuffer console layer you will see alot +of replicated code and and huge of code handling tty/console functionality. -The two major goals of the redesign was to remove all the console code out of the low -level framebuffer drivers. +</P> + +<P> + The primary goal is to remove the console code from fbdev and place it +into fbcon.c. This reduces the code and makes writing a new fbdev driver +easy since the author doesn't need to worry about console internals. It +also allows the ability to run fbdev without a console/tty system on top +of it. +</P> + +<P> + First the roles of struct fb_info and struct display have changed. Struct +display will go away. The way the the new framebuffer console code will +work is that it will act to translate data about the tty/console in +struct vc_data to data in a device independent way in struct fb_info. Then +various functions in struct fb_ops will be called to store the device +dependent state in the par field in struct fb_info and to change the +hardware to that state. This allows a very clean seperation of the fbdev +layer from the console layer. It also allows one to use fbdev on its own +which is a bounus for embedded devices. The reason this approach works is +for each framebuffer device when used as a tty/console device is allocated +a set of virtual terminals to it. Only one virtual terminal can be active +per framebuffer device. We already have all the data we need in struct +vc_data so why store a bunch of colormaps and other fbdev specific data +per virtual terminal. +</P> <P> + As you can see doing this makes the con parameter pretty much useless +for struct fb_ops functions, as it should be. Also having struct +fb_var_screeninfo and other data in fb_info pretty much eliminates the +need for get_fix and get_var. Once all drivers use the fix, var, and cmap +fbcon can be written around these fields. This will also eliminate the +need to regenerate struct fb_var_screeninfo, struct fb_fix_screeninfo +struct fb_cmap every time get_var, get_fix, get_cmap functions are called +as many drivers do now. + +</P> <BR><HR> <ADDRESS> Index: serial.html =================================================================== RCS file: /cvsroot/linuxconsole/ruby/web/htdocs/paper/serial.html,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- serial.html 12 Apr 2002 19:11:16 -0000 1.1 +++ serial.html 16 Apr 2002 19:45:14 -0000 1.2 @@ -53,7 +53,7 @@ <!--End of Navigation Panel--> <H2><A NAME="SECTION00031000000000000000"> -Restructing the framebuffer layer</A> +New Serial Layer</A> </H2> <P> |
From: James S. <jsi...@us...> - 2002-04-16 19:37:35
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb/input In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/drivers/usb/input Added Files: Config.help Config.in Makefile hid-core.c hid-debug.h hid-ff.c hid-input.c hid-lgff.c hid.h hiddev.c pid.c pid.h powermate.c usbkbd.c usbmouse.c usbpath.h wacom.c Log Message: Synced to 2.5.8. --- NEW FILE: Config.help --- CONFIG_USB_HID Say Y here if you want full HID support to connect keyboards, mice, joysticks, graphic tablets, or any other HID based devices to your computer via USB. You also need to select HID Input layer support (below) if you want to use keyboards, mice, joysticks and the like. You can't use this driver and the HIDBP (Boot Protocol) keyboard and mouse drivers at the same time. More information is available: <file:Documentation/input/input.txt>. If unsure, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called hid.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. CONFIG_USB_HIDINPUT Say Y here if you want to use a USB keyboard, mouse or joystick, or any other HID input device. You also need Input layer support, (CONFIG_INPUT) which you select under "Input core support". If unsure, say Y. CONFIG_HID_FF Say Y here is you want force feedback support for a few hid devices. See below for a list of supported devices. See Documentation/input/ff.txt for a description of the force feedback API. If unsure, say N. CONFIG_LOGITECH_RUMBLE Say Y here if you have a Logitech WingMan Cordless rumble pad and if you want to enable force feedback. Note: if you say N here, this device will still be supported, but without force feedback. CONFIG_HID_PID Say Y yes if you have a PID-compliant joystick and wish to enable force feedback for it. The Microsoft Sidewinder Force Feedback 2 is one such device. CONFIG_USB_HIDDEV Say Y here if you want to support HID devices (from the USB specification standpoint) that aren't strictly user interface devices, like monitor controls and Uninterruptable Power Supplies. This module supports these devices separately using a separate event interface on /dev/usb/hiddevX (char 180:96 to 180:111). This driver requires CONFIG_USB_HID. If unsure, say Y. CONFIG_USB_KBD Say Y here only if you are absolutely sure that you don't want to use the generic HID driver for your USB keyboard and prefer to use the keyboard in its limited Boot Protocol mode instead. This is almost certainly not what you want. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usbkbd.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. If even remotely unsure, say N. CONFIG_USB_MOUSE Say Y here only if you are absolutely sure that you don't want to use the generic HID driver for your USB keyboard and prefer to use the keyboard in its limited Boot Protocol mode instead. This is almost certainly not what you want. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usbmouse.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. If even remotely unsure, say N. CONFIG_USB_WACOM Say Y here if you want to use the USB version of the Wacom Intuos or Graphire tablet. Make sure to say Y to "Mouse support" (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wacom.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. CONFIG_USB_POWERMATE Say Y here if you want to use the Griffin Technology, Inc. USB PowerMate device. This device is a stainless steel dial which can measure clockwise and anticlockwise rotation. The dial also acts as a pushbutton. The base contains an LED which can be instructed to pulse or to switch to a particular intensity. You can download userspace tools from http://sowerbutts.com/powermate/ This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called powermate.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. --- NEW FILE: Config.in --- # # USB Input driver configuration # comment 'USB Human Interface Devices (HID)' dep_tristate ' USB Human Interface Device (full HID) support' CONFIG_USB_HID $CONFIG_USB if [ "$CONFIG_INPUT" = "n" ]; then comment ' Input core support is needed for USB HID input layer or HIDBP support' fi dep_mbool ' HID input layer support' CONFIG_USB_HIDINPUT $CONFIG_INPUT $CONFIG_USB_HID dep_mbool ' /dev/hiddev raw HID device support' CONFIG_USB_HIDDEV $CONFIG_USB_HID if [ "$CONFIG_USB_HID" != "y" ]; then dep_tristate ' USB HIDBP Keyboard (basic) support' CONFIG_USB_KBD $CONFIG_USB $CONFIG_INPUT dep_tristate ' USB HIDBP Mouse (basic) support' CONFIG_USB_MOUSE $CONFIG_USB $CONFIG_INPUT dep_tristate ' Griffin Technology PowerMate support' CONFIG_USB_POWERMATE $CONFIG_USB $CONFIG_INPUT dep_mbool ' Force feedback support' CONFIG_HID_FF $CONFIG_USB_HID dep_mbool ' Logitech RumblePad support' CONFIG_LOGITECH_RUMBLE $CONFIG_USB_HID $CONFIG_HID_FF dep_mbool ' PID Devices' CONFIG_HID_PID $CONFIG_USB_HID $CONFIG_HID_FF fi dep_tristate ' Wacom Intuos/Graphire tablet support' CONFIG_USB_WACOM $CONFIG_USB $CONFIG_INPUT # Turn on CONFIG_USB_INPUT if any of the drivers are compiled into the kernel # to make our Makefile logic a bit simpler. if [ "$CONFIG_USB_HID" = "y" -o "$CONFIG_USB_KBD" = "y" -o "$CONFIG_USB_MOUSE" = "y" ]; then define_bool CONFIG_USB_INPUT y fi if [ "$CONFIG_USB_WACOM" = "y" ]; then define_bool CONFIG_USB_INPUT y fi --- NEW FILE: Makefile --- # # Makefile for the USB input drivers # O_TARGET := usb-input.o # Multipart objects. hid-objs := hid-core.o # Optional parts of multipart objects. ifeq ($(CONFIG_USB_HIDDEV),y) hid-objs += hiddev.o endif ifeq ($(CONFIG_USB_HIDINPUT),y) hid-objs += hid-input.o endif ifeq ($(CONFIG_HID_PID),y) hid-objs += pid.o endif ifeq ($(CONFIG_LOGITECH_RUMBLE),y) hid-objs += hid-lgff.o endif ifeq ($(CONFIG_HID_FF),y) hid-objs += hid-ff.o endif obj-$(CONFIG_USB_HID) += hid.o obj-$(CONFIG_USB_KBD) += usbkbd.o obj-$(CONFIG_USB_MOUSE) += usbmouse.o obj-$(CONFIG_USB_WACOM) += wacom.o obj-$(CONFIG_USB_POWERMATE) += powermate.o include $(TOPDIR)/Rules.make --- NEW FILE: hid-core.c --- /* * $Id: hid-core.c,v 1.1 2002/04/16 17:41:51 jsimmons Exp $ * * Copyright (c) 1999 Andreas Gal * Copyright (c) 2000-2001 Vojtech Pavlik * * USB HID support for Linux */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. [...1483 lines suppressed...] usb_register(&hid_driver); info(DRIVER_VERSION ":" DRIVER_DESC); return 0; } static void __exit hid_exit(void) { #ifdef CONFIG_USB_HIDDEV hiddev_exit(); #endif usb_deregister(&hid_driver); } module_init(hid_init); module_exit(hid_exit); MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); MODULE_LICENSE(DRIVER_LICENSE); --- NEW FILE: hid-debug.h --- /* * $Id: hid-debug.h,v 1.1 2002/04/16 17:41:51 jsimmons Exp $ * * (c) 1999 Andreas Gal <ga...@cs...> * (c) 2000-2001 Vojtech Pavlik <vo...@uc...> * * Some debug stuff for the HID parser. */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <vo...@uc...>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic */ struct hid_usage_entry { unsigned page; unsigned usage; char *description; }; static struct hid_usage_entry hid_usage_table[] = { { 0, 0, "Undefined" }, { 1, 0, "GenericDesktop" }, {0, 0x01, "Pointer"}, {0, 0x02, "Mouse"}, {0, 0x04, "Joystick"}, {0, 0x05, "GamePad"}, {0, 0x06, "Keyboard"}, {0, 0x07, "Keypad"}, {0, 0x08, "MultiAxis"}, {0, 0x30, "X"}, {0, 0x31, "Y"}, {0, 0x32, "Z"}, {0, 0x33, "Rx"}, {0, 0x34, "Ry"}, {0, 0x35, "Rz"}, {0, 0x36, "Slider"}, {0, 0x37, "Dial"}, {0, 0x38, "Wheel"}, {0, 0x39, "HatSwitch"}, {0, 0x3a, "CountedBuffer"}, {0, 0x3b, "ByteCount"}, {0, 0x3c, "MotionWakeup"}, {0, 0x3d, "Start"}, {0, 0x3e, "Select"}, {0, 0x40, "Vx"}, {0, 0x41, "Vy"}, {0, 0x42, "Vz"}, {0, 0x43, "Vbrx"}, {0, 0x44, "Vbry"}, {0, 0x45, "Vbrz"}, {0, 0x46, "Vno"}, {0, 0x80, "SystemControl"}, {0, 0x81, "SystemPowerDown"}, {0, 0x82, "SystemSleep"}, {0, 0x83, "SystemWakeUp"}, {0, 0x84, "SystemContextMenu"}, {0, 0x85, "SystemMainMenu"}, {0, 0x86, "SystemAppMenu"}, {0, 0x87, "SystemMenuHelp"}, {0, 0x88, "SystemMenuExit"}, {0, 0x89, "SystemMenuSelect"}, {0, 0x8a, "SystemMenuRight"}, {0, 0x8b, "SystemMenuLeft"}, {0, 0x8c, "SystemMenuUp"}, {0, 0x8d, "SystemMenuDown"}, {0, 0x90, "D-padUp"}, {0, 0x91, "D-padDown"}, {0, 0x92, "D-padRight"}, {0, 0x93, "D-padLeft"}, { 7, 0, "Keyboard" }, { 8, 0, "LED" }, { 9, 0, "Button" }, { 10, 0, "Ordinal" }, { 12, 0, "Hotkey" }, { 13, 0, "Digitizers" }, {0, 0x01, "Digitizer"}, {0, 0x02, "Pen"}, {0, 0x03, "LightPen"}, {0, 0x04, "TouchScreen"}, {0, 0x05, "TouchPad"}, {0, 0x20, "Stylus"}, {0, 0x21, "Puck"}, {0, 0x22, "Finger"}, {0, 0x30, "TipPressure"}, {0, 0x31, "BarrelPressure"}, {0, 0x32, "InRange"}, {0, 0x33, "Touch"}, {0, 0x34, "UnTouch"}, {0, 0x35, "Tap"}, {0, 0x39, "TabletFunctionKey"}, {0, 0x3a, "ProgramChangeKey"}, {0, 0x3c, "Invert"}, {0, 0x42, "TipSwitch"}, {0, 0x43, "SecondaryTipSwitch"}, {0, 0x44, "BarrelSwitch"}, {0, 0x45, "Eraser"}, {0, 0x46, "TabletPick"}, { 15, 0, "PhysicalInterfaceDevice" }, {0, 0x00, "Undefined"}, {0, 0x01, "Physical_Interface_Device"}, {0, 0x20, "Normal"}, {0, 0x21, "Set_Effect_Report"}, {0, 0x22, "Effect_Block_Index"}, {0, 0x23, "Parameter_Block_Offset"}, {0, 0x24, "ROM_Flag"}, {0, 0x25, "Effect_Type"}, {0, 0x26, "ET_Constant_Force"}, {0, 0x27, "ET_Ramp"}, {0, 0x28, "ET_Custom_Force_Data"}, {0, 0x30, "ET_Square"}, {0, 0x31, "ET_Sine"}, {0, 0x32, "ET_Triangle"}, {0, 0x33, "ET_Sawtooth_Up"}, {0, 0x34, "ET_Sawtooth_Down"}, {0, 0x40, "ET_Spring"}, {0, 0x41, "ET_Damper"}, {0, 0x42, "ET_Inertia"}, {0, 0x43, "ET_Friction"}, {0, 0x50, "Duration"}, {0, 0x51, "Sample_Period"}, {0, 0x52, "Gain"}, {0, 0x53, "Trigger_Button"}, {0, 0x54, "Trigger_Repeat_Interval"}, {0, 0x55, "Axes_Enable"}, {0, 0x56, "Direction_Enable"}, {0, 0x57, "Direction"}, {0, 0x58, "Type_Specific_Block_Offset"}, {0, 0x59, "Block_Type"}, {0, 0x5A, "Set_Envelope_Report"}, {0, 0x5B, "Attack_Level"}, {0, 0x5C, "Attack_Time"}, {0, 0x5D, "Fade_Level"}, {0, 0x5E, "Fade_Time"}, {0, 0x5F, "Set_Condition_Report"}, {0, 0x60, "CP_Offset"}, {0, 0x61, "Positive_Coefficient"}, {0, 0x62, "Negative_Coefficient"}, {0, 0x63, "Positive_Saturation"}, {0, 0x64, "Negative_Saturation"}, {0, 0x65, "Dead_Band"}, {0, 0x66, "Download_Force_Sample"}, {0, 0x67, "Isoch_Custom_Force_Enable"}, {0, 0x68, "Custom_Force_Data_Report"}, {0, 0x69, "Custom_Force_Data"}, {0, 0x6A, "Custom_Force_Vendor_Defined_Data"}, {0, 0x6B, "Set_Custom_Force_Report"}, {0, 0x6C, "Custom_Force_Data_Offset"}, {0, 0x6D, "Sample_Count"}, {0, 0x6E, "Set_Periodic_Report"}, {0, 0x6F, "Offset"}, {0, 0x70, "Magnitude"}, {0, 0x71, "Phase"}, {0, 0x72, "Period"}, {0, 0x73, "Set_Constant_Force_Report"}, {0, 0x74, "Set_Ramp_Force_Report"}, {0, 0x75, "Ramp_Start"}, {0, 0x76, "Ramp_End"}, {0, 0x77, "Effect_Operation_Report"}, {0, 0x78, "Effect_Operation"}, {0, 0x79, "Op_Effect_Start"}, {0, 0x7A, "Op_Effect_Start_Solo"}, {0, 0x7B, "Op_Effect_Stop"}, {0, 0x7C, "Loop_Count"}, {0, 0x7D, "Device_Gain_Report"}, {0, 0x7E, "Device_Gain"}, {0, 0x7F, "PID_Pool_Report"}, {0, 0x80, "RAM_Pool_Size"}, {0, 0x81, "ROM_Pool_Size"}, {0, 0x82, "ROM_Effect_Block_Count"}, {0, 0x83, "Simultaneous_Effects_Max"}, {0, 0x84, "Pool_Alignment"}, {0, 0x85, "PID_Pool_Move_Report"}, {0, 0x86, "Move_Source"}, {0, 0x87, "Move_Destination"}, {0, 0x88, "Move_Length"}, {0, 0x89, "PID_Block_Load_Report"}, {0, 0x8B, "Block_Load_Status"}, {0, 0x8C, "Block_Load_Success"}, {0, 0x8D, "Block_Load_Full"}, {0, 0x8E, "Block_Load_Error"}, {0, 0x8F, "Block_Handle"}, {0, 0x90, "PID_Block_Free_Report"}, {0, 0x91, "Type_Specific_Block_Handle"}, {0, 0x92, "PID_State_Report"}, {0, 0x94, "Effect_Playing"}, {0, 0x95, "PID_Device_Control_Report"}, {0, 0x96, "PID_Device_Control"}, {0, 0x97, "DC_Enable_Actuators"}, {0, 0x98, "DC_Disable_Actuators"}, {0, 0x99, "DC_Stop_All_Effects"}, {0, 0x9A, "DC_Device_Reset"}, {0, 0x9B, "DC_Device_Pause"}, {0, 0x9C, "DC_Device_Continue"}, {0, 0x9F, "Device_Paused"}, {0, 0xA0, "Actuators_Enabled"}, {0, 0xA4, "Safety_Switch"}, {0, 0xA5, "Actuator_Override_Switch"}, {0, 0xA6, "Actuator_Power"}, {0, 0xA7, "Start_Delay"}, {0, 0xA8, "Parameter_Block_Size"}, {0, 0xA9, "Device_Managed_Pool"}, {0, 0xAA, "Shared_Parameter_Blocks"}, {0, 0xAB, "Create_New_Effect_Report"}, {0, 0xAC, "RAM_Pool_Available"}, { 0, 0, NULL } }; static void resolv_usage_page(unsigned page) { struct hid_usage_entry *p; for (p = hid_usage_table; p->description; p++) if (p->page == page) { printk("%s", p->description); return; } printk("%04x", page); } static void resolv_usage(unsigned usage) { struct hid_usage_entry *p; resolv_usage_page(usage >> 16); printk("."); for (p = hid_usage_table; p->description; p++) if (p->page == (usage >> 16)) { for(++p; p->description && p->page == 0; p++) if (p->usage == (usage & 0xffff)) { printk("%s", p->description); return; } break; } printk("%04x", usage & 0xffff); } __inline__ static void tab(int n) { while (n--) printk(" "); } static void hid_dump_field(struct hid_field *field, int n) { int j; if (field->physical) { tab(n); printk("Physical("); resolv_usage(field->physical); printk(")\n"); } if (field->logical) { tab(n); printk("Logical("); resolv_usage(field->logical); printk(")\n"); } tab(n); printk("Usage(%d)\n", field->maxusage); for (j = 0; j < field->maxusage; j++) { tab(n+2);resolv_usage(field->usage[j].hid); printk("\n"); } if (field->logical_minimum != field->logical_maximum) { tab(n); printk("Logical Minimum(%d)\n", field->logical_minimum); tab(n); printk("Logical Maximum(%d)\n", field->logical_maximum); } if (field->physical_minimum != field->physical_maximum) { tab(n); printk("Physical Minimum(%d)\n", field->physical_minimum); tab(n); printk("Physical Maximum(%d)\n", field->physical_maximum); } if (field->unit_exponent) { tab(n); printk("Unit Exponent(%d)\n", field->unit_exponent); } if (field->unit) { char *systems[5] = { "None", "SI Linear", "SI Rotation", "English Linear", "English Rotation" }; char *units[5][8] = { { "None", "None", "None", "None", "None", "None", "None", "None" }, { "None", "Centimeter", "Gram", "Seconds", "Kelvin", "Ampere", "Candela", "None" }, { "None", "Radians", "Gram", "Seconds", "Kelvin", "Ampere", "Candela", "None" }, { "None", "Inch", "Slug", "Seconds", "Fahrenheit", "Ampere", "Candela", "None" }, { "None", "Degrees", "Slug", "Seconds", "Fahrenheit", "Ampere", "Candela", "None" } }; int i; int sys; __u32 data = field->unit; /* First nibble tells us which system we're in. */ sys = data & 0xf; data >>= 4; if(sys > 4) { tab(n); printk("Unit(Invalid)\n"); } else { int earlier_unit = 0; tab(n); printk("Unit(%s : ", systems[sys]); for (i=1 ; i<sizeof(__u32)*2 ; i++) { char nibble = data & 0xf; data >>= 4; if (nibble != 0) { if(earlier_unit++ > 0) printk("*"); printk("%s", units[sys][i]); if(nibble != 1) { /* This is a _signed_ nibble(!) */ int val = nibble & 0x7; if(nibble & 0x08) val = -((0x7 & ~val) +1); printk("^%d", val); } } } printk(")\n"); } } tab(n); printk("Report Size(%u)\n", field->report_size); tab(n); printk("Report Count(%u)\n", field->report_count); tab(n); printk("Report Offset(%u)\n", field->report_offset); tab(n); printk("Flags( "); j = field->flags; printk("%s", HID_MAIN_ITEM_CONSTANT & j ? "Constant " : ""); printk("%s", HID_MAIN_ITEM_VARIABLE & j ? "Variable " : "Array "); printk("%s", HID_MAIN_ITEM_RELATIVE & j ? "Relative " : "Absolute "); printk("%s", HID_MAIN_ITEM_WRAP & j ? "Wrap " : ""); printk("%s", HID_MAIN_ITEM_NONLINEAR & j ? "NonLinear " : ""); printk("%s", HID_MAIN_ITEM_NO_PREFERRED & j ? "NoPrefferedState " : ""); printk("%s", HID_MAIN_ITEM_NULL_STATE & j ? "NullState " : ""); printk("%s", HID_MAIN_ITEM_VOLATILE & j ? "Volatile " : ""); printk("%s", HID_MAIN_ITEM_BUFFERED_BYTE & j ? "BufferedByte " : ""); printk(")\n"); } static void hid_dump_device(struct hid_device *device) { struct hid_report_enum *report_enum; struct hid_report *report; struct list_head *list; unsigned i,k; static char *table[] = {"INPUT", "OUTPUT", "FEATURE"}; for (i = 0; i < device->maxapplication; i++) { printk("Application("); resolv_usage(device->application[i]); printk(")\n"); } for (i = 0; i < HID_REPORT_TYPES; i++) { report_enum = device->report_enum + i; list = report_enum->report_list.next; while (list != &report_enum->report_list) { report = (struct hid_report *) list; tab(2); printk("%s", table[i]); if (report->id) printk("(%d)", report->id); printk("[%s]", table[report->type]); printk("\n"); for (k = 0; k < report->maxfield; k++) { tab(4); printk("Field(%d)\n", k); hid_dump_field(report->field[k], 6); } list = list->next; } } } static void hid_dump_input(struct hid_usage *usage, __s32 value) { printk("hid-debug: input "); resolv_usage(usage->hid); printk(" = %d\n", value); } --- NEW FILE: hid-ff.c --- /* * $Id: hid-ff.c,v 1.1 2002/04/16 17:41:51 jsimmons Exp $ * * Force feedback support for hid devices. * Not all hid devices use the same protocol. For example, some use PID, * other use their own proprietary procotol. * * Copyright (c) 2002 Johann Deneux */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so by * e-mail - mail your message to <de...@if...> */ #include <linux/input.h> #define DEBUG #include <linux/usb.h> #include "hid.h" /* Drivers' initializing functions */ extern int hid_lgff_init(struct hid_device* hid); extern int hid_pid_init(struct hid_device* hid); struct hid_ff_initializer { __u16 idVendor; __u16 idProduct; int (*init)(struct hid_device*); }; static struct hid_ff_initializer inits[] = { #ifdef CONFIG_LOGITECH_RUMBLE {0x46d, 0xc211, hid_lgff_init}, #endif #ifdef CONFIG_HID_PID {0x45e, 0x001b, hid_pid_init}, #endif {0, 0, NULL} /* Terminating entry */ }; static struct hid_ff_initializer *hid_get_ff_init(__u16 idVendor, __u16 idProduct) { struct hid_ff_initializer *init; for (init = inits; init->idVendor && !(init->idVendor == idVendor && init->idProduct == idProduct); init++); return init->idVendor? init : NULL; } int hid_ff_init(struct hid_device* hid) { struct hid_ff_initializer *init; init = hid_get_ff_init(hid->dev->descriptor.idVendor, hid->dev->descriptor.idProduct); return init? init->init(hid) : -ENOSYS; } --- NEW FILE: hid-input.c --- /* * $Id: hid-input.c,v 1.1 2002/04/16 17:41:51 jsimmons Exp $ * * Copyright (c) 2000-2001 Vojtech Pavlik * * USB HID to Linux Input mapping */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <vo...@uc...>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic */ #include <linux/module.h> #include <linux/slab.h> #include <linux/kernel.h> #include <linux/input.h> #include <linux/usb.h> #include "hid.h" #define unk KEY_UNKNOWN static unsigned char hid_keyboard[256] = { 0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26, 27, 43, 84, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106, 105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71, 72, 73, 82, 83, 86,127,116,117, 85, 89, 90, 91, 92, 93, 94, 95, 120,121,122,123,134,138,130,132,128,129,131,137,133,135,136,113, 115,114,unk,unk,unk,124,unk,181,182,183,184,185,186,187,188,189, 190,191,192,193,194,195,196,197,198,unk,unk,unk,unk,unk,unk,unk, unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk, unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk, unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk, unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk, 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113, 150,158,159,128,136,177,178,176,142,152,173,140,unk,unk,unk,unk }; static struct { __s32 x; __s32 y; } hid_hat_to_axis[] = {{ 0, 0}, { 0,-1}, { 1,-1}, { 1, 0}, { 1, 1}, { 0, 1}, {-1, 1}, {-1, 0}, {-1,-1}}; static void hidinput_configure_usage(struct hid_device *device, struct hid_field *field, struct hid_usage *usage) { struct input_dev *input = &device->input; int max; int is_abs = 0; unsigned long *bit; switch (usage->hid & HID_USAGE_PAGE) { case HID_UP_KEYBOARD: set_bit(EV_REP, input->evbit); usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; if ((usage->hid & HID_USAGE) < 256) { if (!(usage->code = hid_keyboard[usage->hid & HID_USAGE])) return; clear_bit(usage->code, bit); } else usage->code = KEY_UNKNOWN; break; case HID_UP_BUTTON: usage->code = ((usage->hid - 1) & 0xf) + 0x100; usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; switch (field->application) { case HID_GD_GAMEPAD: usage->code += 0x10; case HID_GD_JOYSTICK: usage->code += 0x10; case HID_GD_MOUSE: usage->code += 0x10; break; default: if (field->physical == HID_GD_POINTER) usage->code += 0x10; break; } break; case HID_UP_GENDESK: if ((usage->hid & 0xf0) == 0x80) { /* SystemControl */ switch (usage->hid & 0xf) { case 0x1: usage->code = KEY_POWER; break; case 0x2: usage->code = KEY_SLEEP; break; case 0x3: usage->code = KEY_WAKEUP; break; default: usage->code = KEY_UNKNOWN; break; } usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; break; } usage->code = usage->hid & 0xf; if (field->report_size == 1) { usage->code = BTN_MISC; usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; break; } if (field->flags & HID_MAIN_ITEM_RELATIVE) { usage->type = EV_REL; bit = input->relbit; max = REL_MAX; break; } usage->type = EV_ABS; bit = input->absbit; max = ABS_MAX; if (usage->hid == HID_GD_HATSWITCH) { usage->code = ABS_HAT0X; usage->hat_min = field->logical_minimum; usage->hat_max = field->logical_maximum; } break; case HID_UP_LED: usage->code = (usage->hid - 1) & 0xf; usage->type = EV_LED; bit = input->ledbit; max = LED_MAX; break; case HID_UP_DIGITIZER: switch (usage->hid & 0xff) { case 0x30: /* TipPressure */ if (!test_bit(BTN_TOUCH, input->keybit)) { device->quirks |= HID_QUIRK_NOTOUCH; set_bit(EV_KEY, input->evbit); set_bit(BTN_TOUCH, input->keybit); } usage->type = EV_ABS; bit = input->absbit; max = ABS_MAX; usage->code = ABS_PRESSURE; clear_bit(usage->code, bit); break; case 0x32: /* InRange */ usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; switch (field->physical & 0xff) { case 0x21: usage->code = BTN_TOOL_MOUSE; break; case 0x22: usage->code = BTN_TOOL_FINGER; break; default: usage->code = BTN_TOOL_PEN; break; } break; case 0x3c: /* Invert */ usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; usage->code = BTN_TOOL_RUBBER; clear_bit(usage->code, bit); break; case 0x33: /* Touch */ case 0x42: /* TipSwitch */ case 0x43: /* TipSwitch2 */ device->quirks &= ~HID_QUIRK_NOTOUCH; usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; usage->code = BTN_TOUCH; clear_bit(usage->code, bit); break; case 0x44: /* BarrelSwitch */ usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; usage->code = BTN_STYLUS; clear_bit(usage->code, bit); break; default: goto unknown; } break; case HID_UP_CONSUMER: /* USB HUT v1.1, pages 56-62 */ set_bit(EV_REP, input->evbit); switch (usage->hid & HID_USAGE) { case 0x000: usage->code = 0; break; case 0x034: usage->code = KEY_SLEEP; break; case 0x036: usage->code = BTN_MISC; break; case 0x08a: usage->code = KEY_WWW; break; case 0x095: usage->code = KEY_HELP; break; case 0x0b0: usage->code = KEY_PLAY; break; case 0x0b1: usage->code = KEY_PAUSE; break; case 0x0b2: usage->code = KEY_RECORD; break; case 0x0b3: usage->code = KEY_FASTFORWARD; break; case 0x0b4: usage->code = KEY_REWIND; break; case 0x0b5: usage->code = KEY_NEXTSONG; break; case 0x0b6: usage->code = KEY_PREVIOUSSONG; break; case 0x0b7: usage->code = KEY_STOPCD; break; case 0x0b8: usage->code = KEY_EJECTCD; break; case 0x0cd: usage->code = KEY_PLAYPAUSE; break; case 0x0e0: is_abs = 1; usage->code = ABS_VOLUME; break; case 0x0e2: usage->code = KEY_MUTE; break; case 0x0e5: usage->code = KEY_BASSBOOST; break; case 0x0e9: usage->code = KEY_VOLUMEUP; break; case 0x0ea: usage->code = KEY_VOLUMEDOWN; break; case 0x183: usage->code = KEY_CONFIG; break; case 0x18a: usage->code = KEY_MAIL; break; case 0x192: usage->code = KEY_CALC; break; case 0x194: usage->code = KEY_FILE; break; case 0x21a: usage->code = KEY_UNDO; break; case 0x21b: usage->code = KEY_COPY; break; case 0x21c: usage->code = KEY_CUT; break; case 0x21d: usage->code = KEY_PASTE; break; case 0x221: usage->code = KEY_FIND; break; case 0x223: usage->code = KEY_HOMEPAGE; break; case 0x224: usage->code = KEY_BACK; break; case 0x225: usage->code = KEY_FORWARD; break; case 0x226: usage->code = KEY_STOP; break; case 0x227: usage->code = KEY_REFRESH; break; case 0x22a: usage->code = KEY_BOOKMARKS; break; default: usage->code = KEY_UNKNOWN; break; } if (is_abs) { usage->type = EV_ABS; bit = input->absbit; max = ABS_MAX; } else { usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; } break; case HID_UP_HPVENDOR: /* Reported on a Dutch layout HP5308 */ set_bit(EV_REP, input->evbit); switch (usage->hid & HID_USAGE) { case 0x021: usage->code = KEY_PRINT; break; case 0x070: usage->code = KEY_HP; break; case 0x071: usage->code = KEY_CAMERA; break; case 0x072: usage->code = KEY_SOUND; break; case 0x073: usage->code = KEY_QUESTION; break; case 0x080: usage->code = KEY_EMAIL; break; case 0x081: usage->code = KEY_CHAT; break; case 0x082: usage->code = KEY_SEARCH; break; case 0x083: usage->code = KEY_CONNECT; break; case 0x084: usage->code = KEY_FINANCE; break; case 0x085: usage->code = KEY_SPORT; break; case 0x086: usage->code = KEY_SHOP; break; default: usage->code = KEY_UNKNOWN; break; } usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; break; case HID_UP_PID: usage->type = EV_FF; bit = input->ffbit; max = FF_MAX; switch(usage->hid & HID_USAGE) { case 0x26: set_bit(FF_CONSTANT, input->ffbit); break; case 0x27: set_bit(FF_RAMP, input->ffbit); break; case 0x28: set_bit(FF_CUSTOM, input->ffbit); break; case 0x30: set_bit(FF_SQUARE, input->ffbit); set_bit(FF_PERIODIC, input->ffbit); break; case 0x31: set_bit(FF_SINE, input->ffbit); set_bit(FF_PERIODIC, input->ffbit); break; case 0x32: set_bit(FF_TRIANGLE, input->ffbit); set_bit(FF_PERIODIC, input->ffbit); break; case 0x33: set_bit(FF_SAW_UP, input->ffbit); set_bit(FF_PERIODIC, input->ffbit); break; case 0x34: set_bit(FF_SAW_DOWN, input->ffbit); set_bit(FF_PERIODIC, input->ffbit); break; case 0x40: set_bit(FF_SPRING, input->ffbit); break; case 0x41: set_bit(FF_DAMPER, input->ffbit); break; case 0x42: set_bit(FF_INERTIA , input->ffbit); break; case 0x43: set_bit(FF_FRICTION, input->ffbit); break; case 0x7e: usage->code = FF_GAIN; break; case 0x83: /* Simultaneous Effects Max */ input->ff_effects_max = (field->value[0]); break; case 0x98: /* Device Control */ usage->code = FF_AUTOCENTER; break; case 0xa4: /* Safety Switch */ usage->code = BTN_DEAD; bit = input->keybit; usage->type = EV_KEY; max = KEY_MAX; break; // case 0x94: /* Effect Playing */ // usage->code = FF_STATUS_PLAYING; // bit = input->ffbit; // max = FF_STATUS_MAX; // break; case 0x9f: /* Device Paused */ case 0xa0: /* Actuators Enabled */ #ifdef DEBUG printk("Not telling the input API about "); resolv_usage(usage->hid); printk("\n"); #endif return; } //AUG goto unknown; //AUG break; default: unknown: if (field->report_size == 1) { if (field->report->type == HID_OUTPUT_REPORT) { usage->code = LED_MISC; usage->type = EV_LED; bit = input->ledbit; max = LED_MAX; break; } usage->code = BTN_MISC; usage->type = EV_KEY; bit = input->keybit; max = KEY_MAX; break; } if (field->flags & HID_MAIN_ITEM_RELATIVE) { usage->code = REL_MISC; usage->type = EV_REL; bit = input->relbit; max = REL_MAX; break; } usage->code = ABS_MISC; usage->type = EV_ABS; bit = input->absbit; max = ABS_MAX; break; } set_bit(usage->type, input->evbit); while (usage->code <= max && test_and_set_bit(usage->code, bit)) { usage->code = find_next_zero_bit(bit, max + 1, usage->code); } if (usage->code > max) return; if (usage->type == EV_ABS) { int a = field->logical_minimum; int b = field->logical_maximum; input->absmin[usage->code] = a; input->absmax[usage->code] = b; input->absfuzz[usage->code] = (b - a) >> 8; input->absflat[usage->code] = (b - a) >> 4; } if (usage->hat_min != usage->hat_max) { int i; for (i = usage->code; i < usage->code + 2 && i <= max; i++) { input->absmax[i] = 1; input->absmin[i] = -1; input->absfuzz[i] = 0; input->absflat[i] = 0; } set_bit(usage->code + 1, input->absbit); } } void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value) { struct input_dev *input = &hid->input; int *quirks = &hid->quirks; if (usage->hat_min != usage->hat_max) { value = (value - usage->hat_min) * 8 / (usage->hat_max - usage->hat_min + 1) + 1; if (value < 0 || value > 8) value = 0; input_event(input, usage->type, usage->code , hid_hat_to_axis[value].x); input_event(input, usage->type, usage->code + 1, hid_hat_to_axis[value].y); return; } if (usage->hid == (HID_UP_DIGITIZER | 0x003c)) { /* Invert */ *quirks = value ? (*quirks | HID_QUIRK_INVERT) : (*quirks & ~HID_QUIRK_INVERT); return; } if (usage->hid == (HID_UP_DIGITIZER | 0x0032)) { /* InRange */ if (value) { input_event(input, usage->type, (*quirks & HID_QUIRK_INVERT) ? BTN_TOOL_RUBBER : usage->code, 1); return; } input_event(input, usage->type, usage->code, 0); input_event(input, usage->type, BTN_TOOL_RUBBER, 0); return; } if (usage->hid == (HID_UP_DIGITIZER | 0x0030) && (*quirks & HID_QUIRK_NOTOUCH)) { /* Pressure */ int a = field->logical_minimum; int b = field->logical_maximum; input_event(input, EV_KEY, BTN_TOUCH, value > a + ((b - a) >> 3)); } if (usage->hid == (HID_UP_PID | 0x83UL)) { /* Simultaneous Effects Max */ input->ff_effects_max = value; return; } if (usage->hid == (HID_UP_PID | 0x7fUL)) { printk("PID Pool Report\n"); return; } if((usage->type == EV_KEY) && (usage->code == 0)) /* Key 0 is "unassigned", not KEY_UKNOWN */ return; input_event(input, usage->type, usage->code, value); if ((field->flags & HID_MAIN_ITEM_RELATIVE) && (usage->type == EV_KEY)) input_event(input, usage->type, usage->code, 0); } static int hidinput_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { struct hid_device *hid = dev->private; warn("hid input event"); #ifdef CONFIG_HID_FF if (type == EV_FF) { return hid_ff_event(hid, dev, type, code, value); } #else if (0) {} #endif else { struct hid_field *field = NULL; int offset; if ((offset = hid_find_field(hid, type, code, &field)) == -1) { warn("event field not found"); return -1; } hid_set_field(field, offset, value); hid_submit_report(hid, field->report, USB_DIR_OUT); } return 0; } static int hidinput_open(struct input_dev *dev) { struct hid_device *hid = dev->private; return hid_open(hid); } static void hidinput_close(struct input_dev *dev) { struct hid_device *hid = dev->private; hid_close(hid); } /* * Register the input device; print a message. * Configure the input layer interface * Read all reports and initalize the absoulte field values. */ int hidinput_connect(struct hid_device *hid) { struct usb_device *dev = hid->dev; struct hid_report_enum *report_enum; struct hid_report *report; struct list_head *list; int i, j, k; for (i = 0; i < hid->maxapplication; i++) if (IS_INPUT_APPLICATION(hid->application[i])) break; if (i == hid->maxapplication) return -1; hid->input.private = hid; hid->input.event = hidinput_input_event; hid->input.open = hidinput_open; hid->input.close = hidinput_close; hid->input.name = hid->name; hid->input.phys = hid->phys; hid->input.uniq = hid->uniq; hid->input.idbus = BUS_USB; hid->input.idvendor = dev->descriptor.idVendor; hid->input.idproduct = dev->descriptor.idProduct; hid->input.idversion = dev->descriptor.bcdDevice; for (k = HID_INPUT_REPORT; k <= HID_OUTPUT_REPORT; k++) { report_enum = hid->report_enum + k; list = report_enum->report_list.next; while (list != &report_enum->report_list) { report = (struct hid_report *) list; for (i = 0; i < report->maxfield; i++) for (j = 0; j < report->field[i]->maxusage; j++) hidinput_configure_usage(hid, report->field[i], report->field[i]->usage + j); list = list->next; } } input_register_device(&hid->input); return 0; } void hidinput_disconnect(struct hid_device *hid) { input_unregister_device(&hid->input); } --- NEW FILE: hid-lgff.c --- /* * $$ * * Force feedback support for hid-compliant devices from Logitech. * * Copyright (c) 2002 Johann Deneux */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so by * e-mail - mail your message to <de...@if...> */ #include <linux/input.h> #include <linux/sched.h> #define DEBUG #include <linux/usb.h> #include <linux/circ_buf.h> #include "hid.h" #define RUN_AT(t) (jiffies + (t)) /* Transmition state */ #define XMIT_RUNNING 0 /* Effect status */ #define EFFECT_STARTED 0 /* Effect is going to play after some time (ff_replay.delay) */ #define EFFECT_PLAYING 1 /* Effect is being played */ #define EFFECT_USED 2 /* Check that the current process can access an effect */ #define CHECK_OWNERSHIP(effect) (current->pid == 0 \ || effect.owner == current->pid) /* **************************************************************************/ /* Implements the protocol used by the Logitech WingMan Cordless rumble pad */ /* **************************************************************************/ #ifdef CONFIG_LOGITECH_RUMBLE #define LGFF_CHECK_OWNERSHIP(i, l) \ (i>=0 && i<LGFF_EFFECTS \ && test_bit(EFFECT_USED, l->effects[i].flags) \ && CHECK_OWNERSHIP(l->effects[i])) #define LGFF_BUFFER_SIZE 64 #define LGFF_EFFECTS 8 struct lgff_magnitudes { unsigned char left; unsigned char right; }; struct lgff_effect { int id; struct hid_ff_logitech* lgff; pid_t owner; unsigned char left; /* Magnitude of vibration for left motor */ unsigned char right; /* Magnitude of vibration for right motor */ struct ff_replay replay; unsigned int count; /* Number of times to play */ struct timer_list timer; unsigned long flags[1]; }; struct hid_ff_logitech { struct hid_device* hid; struct urb* urbffout; /* Output URB used to send ff commands */ struct usb_ctrlrequest ffcr; /* ff commands use control URBs */ char buf[8]; spinlock_t xmit_lock; unsigned int xmit_head, xmit_tail; struct lgff_magnitudes xmit_data[LGFF_BUFFER_SIZE]; long xmit_flags[1]; struct lgff_effect effects[LGFF_EFFECTS]; spinlock_t lock; /* device-level lock. Having locks on a per-effect basis could be nice, but isn't really necessary */ }; static void hid_lgff_ctrl_out(struct urb *urb); static void hid_lgff_exit(struct hid_device* hid); static int hid_lgff_event(struct hid_device *hid, struct input_dev *input, unsigned int type, unsigned int code, int value); static void hid_lgff_make_rumble(struct hid_device* hid); static int hid_lgff_flush(struct input_dev *input, struct file *file); static int hid_lgff_upload_effect(struct input_dev *input, struct ff_effect *effect); static int hid_lgff_erase(struct input_dev *input, int id); static void hid_lgff_ctrl_playback(struct hid_device* hid, struct lgff_effect*, int play); static void hid_lgff_timer(unsigned long timer_data); int hid_lgff_init(struct hid_device* hid) { struct hid_ff_logitech *private; int i; /* Private data */ hid->ff_private = kmalloc(sizeof(struct hid_ff_logitech), GFP_KERNEL); private = hid->ff_private; if (!private) return -1; memset(private, 0, sizeof(struct hid_ff_logitech)); hid->ff_private = private; private->hid = hid; spin_lock_init(&private->lock); spin_lock_init(&private->xmit_lock); private->buf[0] = 0x03; private->buf[1] = 0x42; for (i=0; i<LGFF_EFFECTS; ++i) { struct lgff_effect* effect = &private->effects[i]; struct timer_list* timer = &effect->timer; init_timer(timer); effect->id = i; effect->lgff = private; timer->data = (unsigned long)effect; timer->function = hid_lgff_timer; } /* Event and exit callbacks */ hid->ff_exit = hid_lgff_exit; hid->ff_event = hid_lgff_event; /* USB init */ if (!(private->urbffout = usb_alloc_urb(0, GFP_KERNEL))) { kfree(hid->ff_private); return -1; } usb_fill_control_urb(private->urbffout, hid->dev, 0, (void*) &private->ffcr, private->buf, 8, hid_lgff_ctrl_out, hid); dbg("Created ff output control urb"); /* Input init */ hid->input.upload_effect = hid_lgff_upload_effect; hid->input.flush = hid_lgff_flush; set_bit(FF_RUMBLE, hid->input.ffbit); set_bit(EV_FF, hid->input.evbit); hid->input.ff_effects_max = LGFF_EFFECTS; printk(KERN_INFO "Force feedback for Logitech rumble devices by Johann Deneux <de...@if...>\n"); return 0; } static void hid_lgff_exit(struct hid_device* hid) { struct hid_ff_logitech *lgff = hid->ff_private; if (lgff->urbffout) { usb_unlink_urb(lgff->urbffout); usb_free_urb(lgff->urbffout); } } static int hid_lgff_event(struct hid_device *hid, struct input_dev* input, unsigned int type, unsigned int code, int value) { struct hid_ff_logitech *lgff = hid->ff_private; struct lgff_effect *effect = lgff->effects + code; unsigned long flags; if (type != EV_FF) return -EINVAL; if (!LGFF_CHECK_OWNERSHIP(code, lgff)) return -EACCES; if (value < 0) return -EINVAL; spin_lock_irqsave(&lgff->lock, flags); if (value > 0) { if (test_bit(EFFECT_STARTED, effect->flags)) { spin_unlock_irqrestore(&lgff->lock, flags); return -EBUSY; } if (test_bit(EFFECT_PLAYING, effect->flags)) { spin_unlock_irqrestore(&lgff->lock, flags); return -EBUSY; } effect->count = value; if (effect->replay.delay) { set_bit(EFFECT_STARTED, effect->flags); effect->timer.expires = RUN_AT(effect->replay.delay * HZ / 1000); } else { hid_lgff_ctrl_playback(hid, effect, value); effect->timer.expires = RUN_AT(effect->replay.length * HZ / 1000); } add_timer(&effect->timer); } else { /* value == 0 */ if (test_and_clear_bit(EFFECT_STARTED, effect->flags)) { del_timer(&effect->timer); } else if (test_and_clear_bit(EFFECT_PLAYING, effect->flags)) { del_timer(&effect->timer); hid_lgff_ctrl_playback(hid, effect, value); } if (test_bit(EFFECT_PLAYING, effect->flags)) warn("Effect %d still playing", code); } spin_unlock_irqrestore(&lgff->lock, flags); return 0; } /* Erase all effects this process owns */ static int hid_lgff_flush(struct input_dev *dev, struct file *file) { struct hid_device *hid = dev->private; struct hid_ff_logitech *lgff = hid->ff_private; int i; for (i=0; i<dev->ff_effects_max; ++i) { /*NOTE: no need to lock here. The only times EFFECT_USED is modified is when effects are uploaded or when an effect is erased. But a process cannot close its dev/input/eventX fd and perform ioctls on the same fd all at the same time */ if ( current->pid == lgff->effects[i].owner && test_bit(EFFECT_USED, lgff->effects[i].flags)) { if (hid_lgff_erase(dev, i)) warn("erase effect %d failed", i); } } return 0; } static int hid_lgff_erase(struct input_dev *dev, int id) { struct hid_device *hid = dev->private; struct hid_ff_logitech *lgff = hid->ff_private; unsigned long flags; if (!LGFF_CHECK_OWNERSHIP(id, lgff)) return -EACCES; spin_lock_irqsave(&lgff->lock, flags); hid_lgff_ctrl_playback(hid, lgff->effects + id, 0); lgff->effects[id].flags[0] = 0; spin_unlock_irqrestore(&lgff->lock, flags); return 0; } static int hid_lgff_upload_effect(struct input_dev* input, struct ff_effect* effect) { struct hid_device *hid = input->private; struct hid_ff_logitech *lgff = hid->ff_private; struct lgff_effect new; int id; unsigned long flags; dbg("ioctl rumble"); if (!test_bit(effect->type, input->ffbit)) return -EINVAL; if (effect->type != FF_RUMBLE) return -EINVAL; spin_lock_irqsave(&lgff->lock, flags); if (effect->id == -1) { int i; for (i=0; i<LGFF_EFFECTS && test_bit(EFFECT_USED, lgff->effects[i].flags); ++i); if (i >= LGFF_EFFECTS) { spin_unlock_irqrestore(&lgff->lock, flags); return -ENOSPC; } effect->id = i; lgff->effects[i].owner = current->pid; lgff->effects[i].flags[0] = 0; set_bit(EFFECT_USED, lgff->effects[i].flags); } else if (!LGFF_CHECK_OWNERSHIP(effect->id, lgff)) { spin_unlock_irqrestore(&lgff->lock, flags); return -EACCES; } id = effect->id; new = lgff->effects[id]; new.right = effect->u.rumble.strong_magnitude >> 9; new.left = effect->u.rumble.weak_magnitude >> 9; new.replay = effect->replay; /* If we updated an effect that was being played, we need to remake the rumble effect */ if (test_bit(EFFECT_STARTED, lgff->effects[id].flags) || test_bit(EFFECT_STARTED, lgff->effects[id].flags)) { /* Changing replay parameters is not allowed (for the time being) */ if (new.replay.delay != lgff->effects[id].replay.delay || new.replay.length != lgff->effects[id].replay.length) { spin_unlock_irqrestore(&lgff->lock, flags); return -ENOSYS; } lgff->effects[id] = new; hid_lgff_make_rumble(hid); } else { lgff->effects[id] = new; } spin_unlock_irqrestore(&lgff->lock, flags); return 0; } static void hid_lgff_xmit(struct hid_device* hid) { struct hid_ff_logitech *lgff = hid->ff_private; int err; int tail; unsigned long flags; spin_lock_irqsave(&lgff->xmit_lock, flags); tail = lgff->xmit_tail; if (lgff->xmit_head == tail) { clear_bit(XMIT_RUNNING, lgff->xmit_flags); spin_unlock_irqrestore(&lgff->xmit_lock, flags); return; } lgff->buf[3] = lgff->xmit_data[tail].left; lgff->buf[4] = lgff->xmit_data[tail].right; tail++; tail &= LGFF_BUFFER_SIZE -1; lgff->xmit_tail = tail; spin_unlock_irqrestore(&lgff->xmit_lock, flags); lgff->urbffout->pipe = usb_sndctrlpipe(hid->dev, 0); lgff->ffcr.bRequestType = USB_TYPE_CLASS | USB_DIR_OUT | USB_RECIP_INTERFACE; lgff->urbffout->transfer_buffer_length = lgff->ffcr.wLength = 8; lgff->ffcr.bRequest = 9; lgff->ffcr.wValue = 0x0203; /*NOTE: Potential problem with little/big endian */ lgff->ffcr.wIndex = 0; lgff->urbffout->dev = hid->dev; if ((err=usb_submit_urb(lgff->urbffout, GFP_ATOMIC))) warn("usb_submit_urb returned %d", err); } static void hid_lgff_make_rumble(struct hid_device* hid) { struct hid_ff_logitech *lgff = hid->ff_private; int left = 0, right = 0; int i; int head, tail; unsigned long flags; for (i=0; i<LGFF_EFFECTS; ++i) { if (test_bit(EFFECT_USED, lgff->effects[i].flags) && test_bit(EFFECT_PLAYING, lgff->effects[i].flags)) { left += lgff->effects[i].left; right += lgff->effects[i].right; } } spin_lock_irqsave(&lgff->xmit_lock, flags); head = lgff->xmit_head; tail = lgff->xmit_tail; if (CIRC_SPACE(head, tail, LGFF_BUFFER_SIZE) < 1) { warn("not enough space in xmit buffer to send new packet"); spin_unlock_irqrestore(&lgff->xmit_lock, flags); return; } lgff->xmit_data[head].left = left > 0x7f ? 0x7f : left; lgff->xmit_data[head].right = right > 0x7f ? 0x7f : right; head++; head &= LGFF_BUFFER_SIZE -1; lgff->xmit_head = head; if (test_and_set_bit(XMIT_RUNNING, lgff->xmit_flags)) spin_unlock_irqrestore(&lgff->xmit_lock, flags); else { spin_unlock_irqrestore(&lgff->xmit_lock, flags); hid_lgff_xmit(hid); } } static void hid_lgff_ctrl_out(struct urb *urb) { struct hid_device *hid = urb->context; if (urb->status) warn("hid_irq_ffout status %d received", urb->status); hid_lgff_xmit(hid); } /* Lock must be held by caller */ static void hid_lgff_ctrl_playback(struct hid_device *hid, struct lgff_effect *effect, int play) { if (play) { set_bit(EFFECT_PLAYING, effect->flags); hid_lgff_make_rumble(hid); } else { clear_bit(EFFECT_PLAYING, effect->flags); hid_lgff_make_rumble(hid); } } static void hid_lgff_timer(unsigned long timer_data) { struct lgff_effect *effect = (struct lgff_effect*) timer_data; struct hid_ff_logitech* lgff = effect->lgff; int id = effect->id; unsigned long flags; dbg("in hid_lgff_timer"); if (id < 0 || id >= LGFF_EFFECTS) { warn("Bad effect id %d", id); return; } effect = lgff->effects + id; spin_lock_irqsave(&lgff->lock, flags); if (!test_bit(EFFECT_USED, effect->flags)) { warn("Unused effect id %d", id); } else if (test_bit(EFFECT_STARTED, effect->flags)) { clear_bit(EFFECT_STARTED, effect->flags); set_bit(EFFECT_PLAYING, effect->flags); hid_lgff_ctrl_playback(lgff->hid, effect, 1); effect->timer.expires = RUN_AT(effect->replay.length * HZ / 1000); add_timer(&effect->timer); dbg("Effect %d starts playing", id); } else if (test_bit(EFFECT_PLAYING, effect->flags)) { clear_bit(EFFECT_PLAYING, effect->flags); hid_lgff_ctrl_playback(lgff->hid, effect, 0); if (--effect->count > 0) { /*TODO: check that replay.delay is non-null */ set_bit(EFFECT_STARTED, effect->flags); effect->timer.expires = RUN_AT(effect->replay.delay * HZ / 1000); add_timer(&effect->timer); dbg("Effect %d restarted", id); } else { dbg("Effect %d stopped", id); } } else { warn("Effect %d is not started nor playing", id); } spin_unlock_irqrestore(&lgff->lock, flags); } #endif /* CONFIG_LOGITECH_RUMBLE */ --- NEW FILE: hid.h --- #ifndef __HID_H #define __HID_H /* * $Id: hid.h,v 1.1 2002/04/16 17:41:51 jsimmons Exp $ * * Copyright (c) 1999 Andreas Gal * Copyright (c) 2000-2001 Vojtech Pavlik */ /* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <vo...@uc...>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic */ #include <linux/types.h> #include <linux/slab.h> #include <linux/list.h> /* * USB HID (Human Interface Device) interface class code */ #define USB_INTERFACE_CLASS_HID 3 /* * HID class requests */ #define HID_REQ_GET_REPORT 0x01 #define HID_REQ_GET_IDLE 0x02 #define HID_REQ_GET_PROTOCOL 0x03 #define HID_REQ_SET_REPORT 0x09 #define HID_REQ_SET_IDLE 0x0A #define HID_REQ_SET_PROTOCOL 0x0B /* * HID class descriptor types */ #define HID_DT_HID (USB_TYPE_CLASS | 0x01) #define HID_DT_REPORT (USB_TYPE_CLASS | 0x02) #define HID_DT_PHYSICAL (USB_TYPE_CLASS | 0x03) /* * We parse each description item into this structure. Short items data * values are expanded to 32-bit signed int, long items contain a pointer * into the data area. */ struct hid_item { unsigned format; __u8 size; __u8 type; __u8 tag; union { __u8 u8; __s8 s8; __u16 u16; __s16 s16; __u32 u32; __s32 s32; __u8 *longdata; } data; }; /* * HID report item format */ #define HID_ITEM_FORMAT_SHORT 0 #define HID_ITEM_FORMAT_LONG 1 /* * Special tag indicating long items */ #define HID_ITEM_TAG_LONG 15 /* * HID report descriptor item type (prefix bit 2,3) */ #define HID_ITEM_TYPE_MAIN 0 #define HID_ITEM_TYPE_GLOBAL 1 #define HID_ITEM_TYPE_LOCAL 2 #define HID_ITEM_TYPE_RESERVED 3 /* * HID report descriptor main item tags */ #define HID_MAIN_ITEM_TAG_INPUT 8 #define HID_MAIN_ITEM_TAG_OUTPUT 9 #define HID_MAIN_ITEM_TAG_FEATURE 11 #define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10 #define HID_MAIN_ITEM_TAG_END_COLLECTION 12 /* * HID report descriptor main item contents */ #define HID_MAIN_ITEM_CONSTANT 0x001 #define HID_MAIN_ITEM_VARIABLE 0x002 #define HID_MAIN_ITEM_RELATIVE 0x004 #define HID_MAIN_ITEM_WRAP 0x008 #define HID_MAIN_ITEM_NONLINEAR 0x010 #define HID_MAIN_ITEM_NO_PREFERRED 0x020 #define HID_MAIN_ITEM_NULL_STATE 0x040 #define HID_MAIN_ITEM_VOLATILE 0x080 #define HID_MAIN_ITEM_BUFFERED_BYTE 0x100 /* * HID report descriptor collection item types */ #define HID_COLLECTION_PHYSICAL 0 #define HID_COLLECTION_APPLICATION 1 #define HID_COLLECTION_LOGICAL 2 /* * HID report descriptor global item tags */ #define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1 #define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3 #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4 #define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5 #define HID_GLOBAL_ITEM_TAG_UNIT 6 #define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7 #define HID_GLOBAL_ITEM_TAG_REPORT_ID 8 #define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9 #define HID_GLOBAL_ITEM_TAG_PUSH 10 #define HID_GLOBAL_ITEM_TAG_POP 11 /* * HID report descriptor local item tags */ #define HID_LOCAL_ITEM_TAG_USAGE 0 #define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1 #define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4 #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5 #define HID_LOCAL_ITEM_TAG_STRING_INDEX 7 #define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8 #define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9 #define HID_LOCAL_ITEM_TAG_DELIMITER 10 /* * HID usage tables */ #define HID_USAGE_PAGE 0xffff0000 #define HID_UP_GENDESK 0x00010000 #define HID_UP_KEYBOARD 0x00070000 #define HID_UP_LED 0x00080000 #define HID_UP_BUTTON 0x00090000 #define HID_UP_ORDINAL 0x000a0000 #define HID_UP_CONSUMER 0x000c0000 #define HID_UP_DIGITIZER 0x000d0000 #define HID_UP_PID 0x000f0000 #define HID_UP_HPVENDOR 0xff7f0000 #define HID_USAGE 0x0000ffff #define HID_GD_POINTER 0x00010001 #define HID_GD_MOUSE 0x00010002 #define HID_GD_JOYSTICK 0x00010004 #define HID_GD_GAMEPAD 0x00010005 #define HID_GD_HATSWITCH 0x00010039 /* * HID report types --- Ouch! HID spec says 1 2 3! */ #define HID_INPUT_REPORT 0 #define HID_OUTPUT_REPORT 1 #define HID_FEATURE_REPORT 2 /* * HID device quirks. */ #define HID_QUIRK_INVERT 0x01 #define HID_QUIRK_NOTOUCH 0x02 #define HID_QUIRK_IGNORE 0x04 #define HID_QUIRK_NOGET 0x08 /* * This is the global enviroment of the parser. This information is * persistent for main-items. The global enviroment can be saved and * restored with PUSH/POP statements. */ struct hid_global { unsigned usage_page; __s32 logical_minimum; __s32 logical_maximum; __s32 physical_minimum; __s32 physical_maximum; __s32 unit_exponent; unsigned unit; unsigned report_id; unsigned report_size; unsigned report_count; }; /* * This is the local enviroment. It is resistent up the next main-item. */ #define HID_MAX_DESCRIPTOR_SIZE 4096 #define HID_MAX_USAGES 1024 #define HID_MAX_APPLICATIONS 16 struct hid_local { unsigned usage[HID_MAX_USAGES]; /* usage array */ unsigned usage_index; unsigned usage_minimum; unsigned delimiter_depth; unsigned delimiter_branch; }; /* * This is the collection stack. We climb up the stack to determine * application and function of each field. */ struct hid_collection { unsigned type; unsigned usage; }; struct hid_usage { unsigned hid; /* hid usage code */ __u16 code; /* input driver code */ __u8 type; /* input driver type */ __s8 hat_min; /* hat switch fun */ __s8 hat_max; /* ditto */ }; struct hid_field { unsigned physical; /* physical usage for this field */ unsigned logical; /* logical usage for this field */ unsigned application; /* application usage for this field */ struct hid_usage *usage; /* usage table for this function */ unsigned maxusage; /* maximum usage index */ unsigned flags; /* main-item flags (i.e. volatile,array,constant) */ unsigned report_offset; /* bit offset in the report */ unsigned report_size; /* size of this field in the report */ unsigned report_count; /* number of this field in the report */ unsigned report_type; /* (input,output,feature) */ __s32 *value; /* last known value(s) */ __s32 logical_minimum; __s32 logical_maximum; __s32 physical_minimum; __s32 physical_maximum; __s32 unit_exponent; unsigned unit; struct hid_report *report; /* associated report */ unsigned index; /* index into report->field[] */ }; #define HID_MAX_FIELDS 64 struct hid_report { struct list_head list; unsigned id; /* id of this report */ unsigned type; /* report type */ struct hid_field *field[HID_MAX_FIELDS]; /* fields of the report */ unsigned maxfield; /* maximum valid field index */ unsigned size; /* size of the report (bits) */ struct hid_device *device; /* associated device */ }; struct hid_report_enum { unsigned numbered; struct list_head report_list; struct hid_report *report_id_hash[256]; }; #define HID_REPORT_TYPES 3 #define HID_BUFFER_SIZE 32 #define HID_CONTROL_FIFO_SIZE 64 #define HID_OUTPUT_FIFO_SIZE 64 struct hid_control_fifo { unsigned char dir; struct hid_report *report; }; #define HID_CLAIMED_INPUT 1 #define HID_CLAIMED_HIDDEV 2 #define HID_CTRL_RUNNING 1 #define H... [truncated message content] |
From: James S. <jsi...@us...> - 2002-04-16 19:37:27
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/drivers/usb Removed Files: Config.help Config.in Makefile hid-core.c hid-debug.h hid-ff.c hid-input.c hid-lgff.c hid.h hiddev.c pid.c pid.h powermate.c usbkbd.c usbmouse.c usbpath.h wacom.c Log Message: Synced to 2.5.8. --- Config.help DELETED --- --- Config.in DELETED --- --- Makefile DELETED --- --- hid-core.c DELETED --- --- hid-debug.h DELETED --- --- hid-ff.c DELETED --- --- hid-input.c DELETED --- --- hid-lgff.c DELETED --- --- hid.h DELETED --- --- hiddev.c DELETED --- --- pid.c DELETED --- --- pid.h DELETED --- --- powermate.c DELETED --- --- usbkbd.c DELETED --- --- usbmouse.c DELETED --- --- usbpath.h DELETED --- --- wacom.c DELETED --- |
From: James S. <jsi...@us...> - 2002-04-16 19:37:18
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/arm/kernel Modified Files: armksyms.c Removed Files: traps.c Log Message: Synced to 2.5.8. Index: armksyms.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel/armksyms.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- armksyms.c 18 Mar 2002 19:29:08 -0000 1.2 +++ armksyms.c 16 Apr 2002 17:41:47 -0000 1.3 @@ -63,6 +63,7 @@ extern void __muldi3(void); extern void __ucmpdi2(void); extern void __udivdi3(void); +extern void __umoddi3(void); extern void __udivmoddi4(void); extern void __udivsi3(void); extern void __umodsi3(void); @@ -83,7 +84,7 @@ __MODULE_STRING(sym); \ const struct module_symbol __ksymtab_##sym \ __attribute__((section("__ksymtab"))) = \ - { (unsigned long)&##orig, __kstrtab_##sym }; + { (unsigned long)&orig, __kstrtab_##sym }; /* * floating point math emulator support. @@ -175,7 +176,7 @@ EXPORT_SYMBOL_NOVERS(strlen); EXPORT_SYMBOL_NOVERS(strnlen); EXPORT_SYMBOL_NOVERS(strpbrk); -EXPORT_SYMBOL_NOVERS(strtok); +EXPORT_SYMBOL_NOVERS(strsep); EXPORT_SYMBOL_NOVERS(strrchr); EXPORT_SYMBOL_NOVERS(strstr); EXPORT_SYMBOL_NOVERS(memset); @@ -222,6 +223,7 @@ EXPORT_SYMBOL_NOVERS(__muldi3); EXPORT_SYMBOL_NOVERS(__ucmpdi2); EXPORT_SYMBOL_NOVERS(__udivdi3); +EXPORT_SYMBOL_NOVERS(__umoddi3); EXPORT_SYMBOL_NOVERS(__udivmoddi4); EXPORT_SYMBOL_NOVERS(__udivsi3); EXPORT_SYMBOL_NOVERS(__umodsi3); --- traps.c DELETED --- |
From: James S. <jsi...@us...> - 2002-04-16 19:37:18
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/i386 In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/i386 Modified Files: config.in Log Message: Synced to 2.5.8. Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/i386/config.in,v retrieving revision 1.36 retrieving revision 1.37 diff -u -d -r1.36 -r1.37 --- config.in 22 Mar 2002 20:13:57 -0000 1.36 +++ config.in 16 Apr 2002 17:41:47 -0000 1.37 @@ -25,6 +25,7 @@ Pentium-4 CONFIG_MPENTIUM4 \ K6/K6-II/K6-III CONFIG_MK6 \ Athlon/Duron/K7 CONFIG_MK7 \ + Elan CONFIG_MELAN \ Crusoe CONFIG_MCRUSOE \ Winchip-C6 CONFIG_MWINCHIPC6 \ Winchip-2 CONFIG_MWINCHIP2 \ @@ -119,6 +120,11 @@ define_bool CONFIG_X86_PGE y define_bool CONFIG_X86_USE_PPRO_CHECKSUM y fi +if [ "$CONFIG_MELAN" = "y" ]; then + define_int CONFIG_X86_L1_CACHE_SHIFT 4 + define_bool CONFIG_X86_USE_STRING_486 y + define_bool CONFIG_X86_ALIGNMENT_16 y +fi if [ "$CONFIG_MCYRIXIII" = "y" ]; then define_int CONFIG_X86_L1_CACHE_SHIFT 5 define_bool CONFIG_X86_TSC y @@ -150,6 +156,10 @@ define_bool CONFIG_X86_USE_PPRO_CHECKSUM y define_bool CONFIG_X86_OOSTORE y fi + +bool 'Machine Check Exception' CONFIG_X86_MCE +dep_bool 'Check for non-fatal errors' CONFIG_X86_MCE_NONFATAL $CONFIG_X86_MCE + tristate 'Toshiba Laptop support' CONFIG_TOSHIBA tristate 'Dell laptop support' CONFIG_I8K @@ -160,23 +170,18 @@ choice 'High Memory Support' \ "off CONFIG_NOHIGHMEM \ 4GB CONFIG_HIGHMEM4G \ - 4GB-highpte CONFIG_HIGHMEM4G_HIGHPTE \ - 64GB CONFIG_HIGHMEM64G \ - 64GB-highpte CONFIG_HIGHMEM64G_HIGHPTE" off -if [ "$CONFIG_HIGHMEM4G" = "y" ]; then - define_bool CONFIG_HIGHMEM y + 64GB CONFIG_HIGHMEM64G" off + +if [ "$CONFIG_HIGHMEM4G" = "y" -o "$CONFIG_HIGHMEM64G" = "y" ]; then + bool 'Use high memory pte support' CONFIG_HIGHPTE fi -if [ "$CONFIG_HIGHMEM4G_HIGHPTE" = "y" ]; then + +if [ "$CONFIG_HIGHMEM4G" = "y" ]; then define_bool CONFIG_HIGHMEM y - define_bool CONFIG_HIGHPTE y fi + if [ "$CONFIG_HIGHMEM64G" = "y" ]; then define_bool CONFIG_HIGHMEM y - define_bool CONFIG_X86_PAE y -fi -if [ "$CONFIG_HIGHMEM64G_HIGHPTE" = "y" ]; then - define_bool CONFIG_HIGHMEM y - define_bool CONFIG_HIGHPTE y define_bool CONFIG_X86_PAE y fi |
From: James S. <jsi...@us...> - 2002-04-16 19:37:18
|
Update of /cvsroot/linuxconsole/ruby/linux/lib In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/lib Modified Files: bust_spinlocks.c Removed Files: Makefile Log Message: Synced to 2.5.8. Index: bust_spinlocks.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/lib/bust_spinlocks.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- bust_spinlocks.c 18 Oct 2001 17:52:52 -0000 1.8 +++ bust_spinlocks.c 16 Apr 2002 17:41:53 -0000 1.9 @@ -1,14 +1,13 @@ /* * lib/bust_spinlocks.c * - * Provides a minimal bust_spinlocks for architectures which don't have one - * of their own + * Provides a minimal bust_spinlocks for architectures which don't have one of their own. * - * bust_spinlocks() clears any spinlocks which would prevent oops, die(), - * BUG() and panic() information from reaching the user. + * bust_spinlocks() clears any spinlocks which would prevent oops, die(), BUG() + * and panic() information from reaching the user. */ + #include <linux/config.h> -#include <linux/module.h> #include <linux/kernel.h> #include <linux/spinlock.h> #include <linux/tty.h> @@ -21,23 +20,19 @@ spin_lock_init(&timerlist_lock); if (yes) { oops_in_progress = 1; -/* -ifdef CONFIG_SMP - atomic_set(&global_irq_lock,0); -#endif -*/ } else { int loglevel_save = console_loglevel; + oops_in_progress = 0; /* * OK, the message is on the console. Now we call printk() - * without oops_in_progress set so that printk() will give - * klogd and the blanked console a poke. Hold onto your hats... + * without oops_in_progress set so that printk() will give klogd + * and the blanked console a poke. Hold onto your hats... */ - console_loglevel = 15; /* NMI oopser may have shut the console up */ + console_loglevel = 15; /* NMI oopser may have shut the console up */ printk(" "); console_loglevel = loglevel_save; } } -EXPORT_SYMBOL(bust_spinlocks); + --- Makefile DELETED --- |
From: James S. <jsi...@us...> - 2002-04-16 19:37:15
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/drivers/video Modified Files: Config.in Makefile fbmem.c Removed Files: sa1100fb.c sa1100fb.h Log Message: Synced to 2.5.8. Index: Config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/Config.in,v retrieving revision 1.60 retrieving revision 1.61 diff -u -d -r1.60 -r1.61 --- Config.in 12 Apr 2002 18:08:09 -0000 1.60 +++ Config.in 16 Apr 2002 17:41:51 -0000 1.61 @@ -3,7 +3,7 @@ # mainmenu_option next_comment -comment 'Video ' +comment 'Graphics support' # # Video card configuration Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/Makefile,v retrieving revision 1.45 retrieving revision 1.46 diff -u -d -r1.45 -r1.46 --- Makefile 12 Apr 2002 18:08:09 -0000 1.45 +++ Makefile 16 Apr 2002 17:41:52 -0000 1.46 @@ -50,6 +50,7 @@ obj-$(CONFIG_FB_PLATINUM) += platinumfb.o obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o obj-$(CONFIG_FB_CT65550) += chipsfb.o +obj-$(CONFIG_FB_ANAKIN) += anakinfb.o obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o obj-$(CONFIG_FB_CYBER) += cyberfb.o obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o Index: fbmem.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/fbmem.c,v retrieving revision 1.61 retrieving revision 1.62 diff -u -d -r1.61 -r1.62 --- fbmem.c 23 Mar 2002 00:22:58 -0000 1.61 +++ fbmem.c 16 Apr 2002 17:41:52 -0000 1.62 @@ -60,6 +60,7 @@ extern int acornfb_setup(char*); extern int amifb_init(void); extern int amifb_setup(char*); +extern int anakinfb_init(void); extern int atafb_init(void); extern int atafb_setup(char*); extern int macfb_init(void); @@ -72,6 +73,7 @@ extern int pm3fb_setup(char*); extern int clps711xfb_init(void); extern int cyber2000fb_init(void); +extern int cyber2000fb_setup(char*); extern int retz3fb_init(void); extern int retz3fb_setup(char*); extern int clgenfb_init(void); @@ -172,14 +174,17 @@ #ifdef CONFIG_FB_AMIGA { "amifb", amifb_init, amifb_setup }, #endif +#ifdef CONFIG_FB_ANAKIN + { "anakinfb", anakinfb_init, NULL }, +#endif #ifdef CONFIG_FB_CLPS711X - { "clps711xfb", clps711xfb_init, NULL }, + { "clps711xfb", clps711xfb_init, NULL }, #endif #ifdef CONFIG_FB_CYBER { "cyber", cyberfb_init, cyberfb_setup }, #endif #ifdef CONFIG_FB_CYBER2000 - { "cyber2000", cyber2000fb_init, NULL }, + { "cyber2000", cyber2000fb_init, cyber2000fb_setup }, #endif #ifdef CONFIG_FB_PM2 { "pm2fb", pm2fb_init, pm2fb_setup }, --- sa1100fb.c DELETED --- --- sa1100fb.h DELETED --- |
From: James S. <jsi...@us...> - 2002-04-16 19:37:14
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video/aty In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/drivers/video/aty Removed Files: atyfb_base.c Log Message: Synced to 2.5.8. --- atyfb_base.c DELETED --- |
From: James S. <jsi...@us...> - 2002-04-16 19:37:13
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/arm Modified Files: config.in Log Message: Synced to 2.5.8. Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/config.in,v retrieving revision 1.22 retrieving revision 1.23 diff -u -d -r1.22 -r1.23 --- config.in 22 Mar 2002 20:13:57 -0000 1.22 +++ config.in 16 Apr 2002 17:41:46 -0000 1.23 @@ -14,20 +14,7 @@ define_bool CONFIG_GENERIC_BUST_SPINLOCK n define_bool CONFIG_GENERIC_ISA_DMA n -mainmenu_option next_comment -comment 'Code maturity level options' -bool 'Prompt for development and/or incomplete code/drivers' CONFIG_EXPERIMENTAL -bool 'Prompt for obsolete code/drivers' CONFIG_OBSOLETE -endmenu - - -mainmenu_option next_comment -comment 'Loadable module support' -bool 'Enable loadable module support' CONFIG_MODULES -dep_bool ' Set version information on all module symbols' CONFIG_MODVERSIONS $CONFIG_MODULES -dep_bool ' Kernel module loader' CONFIG_KMOD $CONFIG_MODULES -endmenu - +source init/Config.in mainmenu_option next_comment comment 'System Type' @@ -104,6 +91,7 @@ dep_bool ' FreeBird-v1.1' CONFIG_SA1100_FREEBIRD $CONFIG_ARCH_SA1100 dep_bool ' GraphicsClient Plus' CONFIG_SA1100_GRAPHICSCLIENT $CONFIG_ARCH_SA1100 dep_bool ' GraphicsMaster' CONFIG_SA1100_GRAPHICSMASTER $CONFIG_ARCH_SA1100 +dep_bool ' HP Labs BadgePAD 4' CONFIG_SA1100_BADGE4 $CONFIG_ARCH_SA1100 dep_bool ' HP Jornada 720' CONFIG_SA1100_JORNADA720 $CONFIG_ARCH_SA1100 dep_bool ' HuW WebPanel' CONFIG_SA1100_HUW_WEBPANEL $CONFIG_ARCH_SA1100 dep_bool ' Itsy' CONFIG_SA1100_ITSY $CONFIG_ARCH_SA1100 @@ -120,6 +108,7 @@ dep_bool ' Victor' CONFIG_SA1100_VICTOR $CONFIG_ARCH_SA1100 dep_bool ' XP860' CONFIG_SA1100_XP860 $CONFIG_ARCH_SA1100 dep_bool ' Yopy' CONFIG_SA1100_YOPY $CONFIG_ARCH_SA1100 +dep_bool ' Stork' CONFIG_SA1100_STORK $CONFIG_ARCH_SA1100 # Determine if SA1111 support is required if [ "$CONFIG_ASSABET_NEPONSET" = "y" -o \ @@ -128,7 +117,8 @@ "$CONFIG_SA1100_XP860" = "y" -o \ "$CONFIG_SA1100_GRAPHICSMASTER" = "y" -o \ "$CONFIG_SA1100_PT_SYSTEM3" = "y" -o \ - "$CONFIG_SA1100_ADSBITSY" = "y" ]; then + "$CONFIG_SA1100_ADSBITSY" = "y" -o \ + "$CONFIG_SA1100_BADGE4" = "y" ]; then define_bool CONFIG_SA1111 y define_int CONFIG_FORCE_MAX_ZONEORDER 9 fi @@ -147,6 +137,7 @@ dep_bool ' CLEP7312' CONFIG_ARCH_CLEP7312 $CONFIG_ARCH_CLPS711X dep_bool ' EDB7211' CONFIG_ARCH_EDB7211 $CONFIG_ARCH_CLPS711X dep_bool ' P720T' CONFIG_ARCH_P720T $CONFIG_ARCH_CLPS711X +dep_bool ' FORTUNET' CONFIG_ARCH_FORTUNET $CONFIG_ARCH_CLPS711X # XXX Maybe these should indicate register compatibility # instead of being mutually exclusive. @@ -227,7 +218,7 @@ comment 'Processor Type' # Firstly, figure out what processor architecture version we should be using. -# This depends more on the machine type than anything else. +# This defines the compiler instruction set which depends on the machine type. if [ "$CONFIG_ARCH_RPC" = "y" -o "$CONFIG_ARCH_CLPS7500" = "y" ]; then define_bool CONFIG_CPU_32v3 y @@ -244,10 +235,15 @@ else define_bool CONFIG_CPU_32v4 n fi +if [ "$CONFIG_ARCH_IOP310" = "y" -o "$CONFIG_ARCH_ADIFCC" = "y" ]; then + define_bool CONFIG_CPU_32v5 y +else + define_bool CONFIG_CPU_32v5 n +fi -# Select CPU types depending on the architecture selected. -# We use this to select which CPUs are supported, and to select -# the compiler tuning options. +# Select CPU types depending on the architecture selected. This selects +# which CPUs we support in the kernel image, and the compiler instruction +# optimiser behaviour. # ARM610 if [ "$CONFIG_ARCH_RPC" = "y" ]; then @@ -286,14 +282,6 @@ else define_bool CONFIG_CPU_ARM920T n fi -if [ "$CONFIG_CPU_ARM920T" = "y" ]; then - bool ' ARM920T CPU idle' CONFIG_CPU_ARM920_CPU_IDLE - bool ' ARM920T I-Cache on' CONFIG_CPU_ARM920_I_CACHE_ON - bool ' ARM920T D-Cache on' CONFIG_CPU_ARM920_D_CACHE_ON - if [ "$CONFIG_CPU_ARM920_D_CACHE_ON" = "y" ] ; then - bool ' Force write through caches on ARM920T' CONFIG_CPU_ARM920_WRITETHROUGH - fi -fi # ARM922T if [ "$CONFIG_ARCH_CAMELOT" = "y" ]; then @@ -301,14 +289,6 @@ else define_bool CONFIG_CPU_ARM922T n fi -if [ "$CONFIG_CPU_ARM922T" = "y" ]; then - bool ' ARM922T CPU idle' CONFIG_CPU_ARM922_CPU_IDLE - bool ' ARM922T I-Cache on' CONFIG_CPU_ARM922_I_CACHE_ON - bool ' ARM922T D-Cache on' CONFIG_CPU_ARM922_D_CACHE_ON - if [ "$CONFIG_CPU_ARM922_D_CACHE_ON" = "y" ] ; then - bool ' Force write through caches on ARM922T' CONFIG_CPU_ARM922_WRITETHROUGH - fi -fi # ARM926T if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then @@ -316,18 +296,6 @@ else define_bool CONFIG_CPU_ARM926T n fi -if [ "$CONFIG_CPU_ARM926T" = "y" ]; then - bool ' ARM926T CPU idle' CONFIG_CPU_ARM926_CPU_IDLE - bool ' ARM926T I-Cache on' CONFIG_CPU_ARM926_I_CACHE_ON - bool ' ARM926T D-Cache on' CONFIG_CPU_ARM926_D_CACHE_ON - if [ "$CONFIG_CPU_ARM926_D_CACHE_ON" = "y" ] ; then - bool ' Force write through caches on ARM926T' CONFIG_CPU_ARM926_WRITETHROUGH - fi - if [ "$CONFIG_CPU_ARM926_I_CACHE_ON" = "y" -o \ - "$CONFIG_CPU_ARM926_D_CACHE_ON" = "y" ]; then - bool ' Round robin I and D cache replacement algorithm' CONFIG_CPU_ARM926_ROUND_ROBIN - fi -fi # ARM1020 if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then @@ -335,17 +303,6 @@ else define_bool CONFIG_CPU_ARM1020 n fi -if [ "$CONFIG_CPU_ARM1020" = "y" ]; then - bool ' ARM1020 I-Cache on' CONFIG_CPU_ARM1020_I_CACHE_ON - bool ' ARM10 D-Cache on' CONFIG_CPU_ARM1020_D_CACHE_ON - if [ "$CONFIG_CPU_ARM1020_D_CACHE_ON" = "y" ] ; then - bool ' Force write through caches on ARM1020' CONFIG_CPU_ARM1020_FORCE_WRITE_THROUGH - fi - if [ "$CONFIG_CPU_ARM1020_I_CACHE_ON" = "y" -o \ - "$CONFIG_CPU_ARM1020_D_CACHE_ON" = "y" ]; then - bool ' Round robin I and D cache replacement algorithm' CONFIG_CPU_ARM1020_ROUND_ROBIN - fi -fi # SA110 if [ "$CONFIG_ARCH_EBSA110" = "y" -o "$CONFIG_FOOTBRIDGE" = "y" -o \ @@ -369,8 +326,9 @@ # XScale if [ "$CONFIG_ARCH_IOP310" = "y" -o "$CONFIG_ARCH_ADIFCC" = "y" ]; then - define_bool CONFIG_CPU_32v5 y define_bool CONFIG_CPU_XSCALE y +else + define_bool CONFIG_CPU_XSCALE n fi #if [ "$CONFIG_CPU_XSCALE" = "y" ]; then @@ -383,9 +341,34 @@ define_bool CONFIG_XSCALE_PMU n fi -if [ "$CONFIG_CPU_32" = "y" ]; then +comment 'Processor Features' + +if [ "$CONFIG_CPU_ARM720T" = "y" -o "$CONFIG_CPU_ARM920T" = "y" -o \ + "$CONFIG_CPU_ARM922T" = "y" -o "$CONFIG_CPU_ARM926T" = "y" -o \ + "$CONFIG_CPU_ARM1020" = "y" -o "$CONFIG_CPU_XSCALE" = "y" ]; then dep_bool 'Support Thumb instructions (experimental)' CONFIG_ARM_THUMB $CONFIG_EXPERIMENTAL fi +if [ "$CONFIG_CPU_ARM920T" = "y" -o "$CONFIG_CPU_ARM922T" = "y" -o \ + "$CONFIG_CPU_ARM926T" = "y" -o "$CONFIG_CPU_ARM1020" = "y" ]; then + bool 'Disable I-Cache' CONFIG_CPU_ICACHE_DISABLE + bool 'Disable D-Cache' CONFIG_CPU_DCACHE_DISABLE + if [ "$CONFIG_CPU_DISABLE_DCACHE" = "n" ]; then + bool 'Force write through D-cache' CONFIG_CPU_DCACHE_WRITETHROUGH + fi +fi +if [ "$CONFIG_CPU_ARM926T" = "y" -o "$CONFIG_CPU_ARM1020" = "y" ]; then + if [ "$CONFIG_CPU_ICACHE_DISABLE" = "n" -o "$CONFIG_CPU_DCACHE_DISABLE" = "n" ]; then + bool 'Round robin I and D cache replacement algorithm' CONFIG_CPU_CACHE_ROUND_ROBIN + fi +fi +if [ "$CONFIG_CPU_ARM1020" = "y" ]; then + bool 'Disable branch prediction' CONFIG_CPU_BPREDICT_DISABLE +fi + +endmenu + +mainmenu_option next_comment +comment 'General setup' # Select various configuration options depending on the machine type if [ "$CONFIG_ARCH_EDB7211" = "y" -o \ @@ -395,11 +378,6 @@ define_bool CONFIG_DISCONTIGMEM n fi -endmenu - -mainmenu_option next_comment -comment 'General setup' - # Now handle the bus types if [ "$CONFIG_ARCH_FTVPCI" = "y" -o \ "$CONFIG_ARCH_SHARK" = "y" -o \ @@ -467,10 +445,6 @@ else define_bool CONFIG_PCMCIA n fi -bool 'Networking support' CONFIG_NET -bool 'System V IPC' CONFIG_SYSVIPC -bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT -bool 'Sysctl support' CONFIG_SYSCTL comment 'At least one math emulation must be selected' tristate 'NWFPE math emulation' CONFIG_FPE_NWFPE dep_tristate 'FastFPE math emulation (experimental)' CONFIG_FPE_FASTFPE $CONFIG_EXPERIMENTAL @@ -481,6 +455,7 @@ tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC bool 'Power Management support' CONFIG_PM +dep_bool 'Preemptible Kernel (experimental)' CONFIG_PREEMPT $CONFIG_CPU_32 $CONFIG_EXPERIMENTAL dep_tristate 'Advanced Power Management Emulation' CONFIG_APM $CONFIG_PM dep_tristate 'RISC OS personality' CONFIG_ARTHUR $CONFIG_CPU_32 @@ -537,7 +512,6 @@ fi endmenu -source drivers/serial/Config.in source drivers/parport/Config.in if [ "$CONFIG_ALIGNMENT_TRAP" = "y" ]; then @@ -611,11 +585,15 @@ # # input before char - char/joystick depends on it. As does USB. # -source drivers/usb/Config.in source drivers/input/Config.in +source drivers/char/Config.in + +source drivers/media/Config.in source fs/Config.in +source drivers/video/Config.in + if [ "$CONFIG_ARCH_ACORN" = "y" -o \ "$CONFIG_ARCH_CLPS7500" = "y" -o \ "$CONFIG_ARCH_TBOX" = "y" -o \ @@ -627,14 +605,14 @@ tristate 'Sound support' CONFIG_SOUND if [ "$CONFIG_SOUND" != "n" ]; then - source drivers/sound/Config.in + source sound/Config.in fi endmenu fi source drivers/misc/Config.in -source drivers/media/Config.in -source drivers/video/Config.in + +source drivers/usb/Config.in if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then source net/bluetooth/Config.in @@ -648,7 +626,6 @@ bool 'Compile kernel without frame pointer' CONFIG_NO_FRAME_POINTER bool 'Verbose user fault messages' CONFIG_DEBUG_USER bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO -dep_bool 'Disable pgtable cache' CONFIG_NO_PGT_CACHE $CONFIG_CPU_26 bool 'Kernel debugging' CONFIG_DEBUG_KERNEL dep_bool ' Debug memory allocations' CONFIG_DEBUG_SLAB $CONFIG_DEBUG_KERNEL @@ -661,7 +638,6 @@ dep_bool ' Kernel low-level debugging functions' CONFIG_DEBUG_LL $CONFIG_DEBUG_KERNEL dep_bool ' Kernel low-level debugging messages via footbridge serial port' CONFIG_DEBUG_DC21285_PORT $CONFIG_DEBUG_LL $CONFIG_FOOTBRIDGE dep_bool ' Kernel low-level debugging messages via UART2' CONFIG_DEBUG_CLPS711X_UART2 $CONFIG_DEBUG_LL $CONFIG_ARCH_CLPS711X -dep_bool ' Kernel low-level debugging messages via SA1100 Ser3 (otherwise Ser1)' CONFIG_DEBUG_LL_SER3 $CONFIG_DEBUG_LL $CONFIG_ARCH_SA1100 endmenu source lib/Config.in |
From: James S. <jsi...@us...> - 2002-04-16 19:37:02
|
Update of /cvsroot/linuxconsole/ruby/linux In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux Modified Files: Makefile Log Message: Synced to 2.5.8. Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/Makefile,v retrieving revision 1.50 retrieving revision 1.51 diff -u -d -r1.50 -r1.51 --- Makefile 12 Apr 2002 21:19:31 -0000 1.50 +++ Makefile 16 Apr 2002 17:41:46 -0000 1.51 @@ -1,12 +1,12 @@ VERSION = 2 PATCHLEVEL = 5 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = -ruby KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) -KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//") +KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g") CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ else if [ -x /bin/bash ]; then echo /bin/bash; \ @@ -342,7 +342,7 @@ $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $*.o $< init/do_mounts.o: init/do_mounts.c include/config/MARKER - $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -c -o $*.o $< + $(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -DKBUILD_BASENAME=$(subst $(comma),_,$(subst -,_,$(*F))) -c -o $*.o $< fs lib mm ipc kernel drivers net sound: dummy $(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@) |
From: James S. <jsi...@us...> - 2002-04-16 19:36:59
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/alpha/kernel In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/alpha/kernel Modified Files: setup.c Log Message: Synced to 2.5.8. Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/alpha/kernel/setup.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- setup.c 19 Mar 2002 19:08:03 -0000 1.8 +++ setup.c 16 Apr 2002 17:41:46 -0000 1.9 @@ -470,6 +470,7 @@ struct percpu_struct *cpu; char *type_name, *var_name, *p; void *kernel_end = _end; /* end of kernel */ + char *args = command_line; hwrpb = (struct hwrpb_struct*) __va(INIT_HWRPB->phys_addr); boot_cpuid = hard_smp_processor_id(); @@ -507,7 +508,8 @@ /* * Process command-line arguments. */ - for (p = strtok(command_line, " \t"); p ; p = strtok(NULL, " \t")) { + while ((p = strsep(&args, " \t")) != NULL) { + if (!*p) continue; if (strncmp(p, "alpha_mv=", 9) == 0) { vec = get_sysvec_byname(p+9); continue; @@ -526,7 +528,7 @@ } } - /* Replace the command line, now that we've killed it with strtok. */ + /* Replace the command line, now that we've killed it with strsep. */ strcpy(command_line, saved_command_line); /* If we want SRM console printk echoing early, do it now. */ |
From: James S. <jsi...@us...> - 2002-04-16 19:36:59
|
Update of /cvsroot/linuxconsole/ruby/linux/Documentation/DocBook In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/Documentation/DocBook Modified Files: Makefile kernel-api.tmpl Log Message: Synced to 2.5.8. Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/Documentation/DocBook/Makefile,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- Makefile 13 Mar 2002 23:48:36 -0000 1.9 +++ Makefile 16 Apr 2002 17:41:46 -0000 1.10 @@ -59,8 +59,8 @@ $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/net/wan/z85230.c \ <z8530book.tmpl >z8530book.sgml -via-audio.sgml: via-audio.tmpl $(TOPDIR)/drivers/sound/via82cxxx_audio.c - $(TOPDIR)/scripts/docgen $(TOPDIR)/drivers/sound/via82cxxx_audio.c \ +via-audio.sgml: via-audio.tmpl $(TOPDIR)/sound/oss/via82cxxx_audio.c + $(TOPDIR)/scripts/docgen $(TOPDIR)/sound/oss/via82cxxx_audio.c \ <via-audio.tmpl >via-audio.sgml tulip-user.sgml: tulip-user.tmpl @@ -100,12 +100,12 @@ $(TOPDIR)/drivers/hotplug/pci_hotplug_core.c \ $(TOPDIR)/drivers/hotplug/pci_hotplug_util.c \ $(TOPDIR)/drivers/block/ll_rw_blk.c \ - $(TOPDIR)/drivers/sound/sound_core.c \ - $(TOPDIR)/drivers/sound/sound_firmware.c \ + $(TOPDIR)/sound/sound_core.c \ + $(TOPDIR)/sound/sound_firmware.c \ $(TOPDIR)/drivers/net/wan/syncppp.c \ $(TOPDIR)/drivers/net/wan/z85230.c \ - $(TOPDIR)/drivers/usb/hcd.c \ - $(TOPDIR)/drivers/usb/usb.c \ + $(TOPDIR)/drivers/usb/core/hcd.c \ + $(TOPDIR)/drivers/usb/core/usb.c \ $(TOPDIR)/drivers/video/fbmem.c \ $(TOPDIR)/drivers/video/fbcmap.c \ $(TOPDIR)/drivers/video/fbcon.c \ Index: kernel-api.tmpl =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/Documentation/DocBook/kernel-api.tmpl,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- kernel-api.tmpl 13 Mar 2002 23:48:36 -0000 1.6 +++ kernel-api.tmpl 16 Apr 2002 17:41:46 -0000 1.7 @@ -203,8 +203,8 @@ <chapter id="snddev"> <title>Sound Devices</title> -!Edrivers/sound/sound_core.c -!Idrivers/sound/sound_firmware.c +!Esound/sound_core.c +!Isound/sound_firmware.c </chapter> <chapter id="usb"> @@ -282,7 +282,7 @@ </sect1> <sect1><title>USB Core APIs</title> -!Edrivers/usb/usb.c +!Edrivers/usb/core/usb.c </sect1> <sect1><title>Host Controller APIs</title> @@ -290,7 +290,7 @@ most of which implement standard register interfaces such as EHCI, OHCI, or UHCI. </para> -!Edrivers/usb/hcd.c +!Edrivers/usb/core/hcd.c </sect1> </chapter> |
From: James S. <jsi...@us...> - 2002-04-16 19:32:23
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video In directory usw-pr-cvs1:/tmp/cvs-serv17130 Added Files: anakinfb.c Log Message: Added anakin framebuffer which was easy to port over to new api. --- NEW FILE: anakinfb.c --- /* * linux/drivers/video/anakinfb.c * * Copyright (C) 2001 Aleph One Ltd. for Acunia N.V. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Changelog: * 23-Apr-2001 TTC Created */ #include <linux/types.h> #include <linux/fb.h> #include <linux/string.h> #include <linux/errno.h> #include <linux/init.h> #include <linux/module.h> #include <asm/io.h> static u16 colreg[16]; static struct fb_info fb_info; static struct fb_var_screeninfo anakinfb_var = { xres: 400, yres: 234, xres_virtual: 400, yres_virtual: 234, bits_per_pixel: 16, red: { 11, 5, 0 }, green: { 5, 6, 0 }, blue: { 0, 5, 0 }, activate: FB_ACTIVATE_NOW, height: -1, width: -1, vmode: FB_VMODE_NONINTERLACED, }; static struct fb_fix_screeninfo anakinfb_fix = { id: "AnakinFB", smem_start: VGA_START, smem_len: VGA_SIZE, type: FB_TYPE_PACKED_PIXELS, visual: FB_VISUAL_TRUECOLOR, line_length: 400*2, accel: FB_ACCEL_NONE, }; static int anakinfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, u_int transp, struct fb_info *info) { if (regno > 15) return 1; colreg[regno] = (red & 0xf800) | (green & 0xfc00 >> 5) | (blue & 0xf800 >> 11); return 0; } static struct fb_ops anakinfb_ops = { owner: THIS_MODULE, fb_setcolreg: anakinfb_setcolreg, fb_fillrect: cfb_fillrect, fb_copyarea: cfb_copyarea, fb_imageblit: cfb_imageblit, }; int __init anakinfb_init(void) { memset(&fb_info, 0, sizeof(struct fb_info)); fb_info.node = -1; fb_info.flags = FBINFO_FLAG_DEFAULT; fb_info.fbops = &anakinfb_ops; fb_info.var = anakinfb_var; fb_info.fix = anakinfb_fix; fb_info.screen_base = ioremap(VGA_START, VGA_SIZE); if (register_framebuffer(&fb_info) < 0) return -EINVAL; MOD_INC_USE_COUNT; return 0; } MODULE_AUTHOR("Tak-Shing Chan <ch...@al...>"); MODULE_DESCRIPTION("Anakin framebuffer driver"); MODULE_SUPPORTED_DEVICE("fb"); |
From: James S. <jsi...@us...> - 2002-04-16 19:32:21
|
Update of /cvsroot/linuxconsole/ruby/linux/include/linux In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/include/linux Modified Files: hiddev.h Log Message: Synced to 2.5.8. Index: hiddev.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/include/linux/hiddev.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- hiddev.h 22 Mar 2002 20:13:58 -0000 1.7 +++ hiddev.h 16 Apr 2002 17:41:53 -0000 1.8 @@ -119,13 +119,17 @@ __s32 value; }; +/* FIELD_INDEX_NONE is returned in read() data from the kernel when flags + * is set to (HIDDEV_FLAG_UREF | HIDDEV_FLAG_REPORT) and a new report has + * been sent by the device + */ #define HID_FIELD_INDEX_NONE 0xffffffff /* * Protocol version. */ -#define HID_VERSION 0x010002 +#define HID_VERSION 0x010003 /* * IOCTLs (0x00 - 0x7f) @@ -139,20 +143,20 @@ #define HIDIOCGNAME(len) _IOC(_IOC_READ, 'H', 0x06, len) #define HIDIOCGREPORT _IOW('H', 0x07, struct hiddev_report_info) #define HIDIOCSREPORT _IOW('H', 0x08, struct hiddev_report_info) -#define HIDIOCGREPORTINFO _IOWR('H', 0x09, struct hiddev_report_info) -#define HIDIOCGFIELDINFO _IOWR('H', 0x0A, struct hiddev_field_info) -#define HIDIOCGUSAGE _IOWR('H', 0x0B, struct hiddev_usage_ref) -#define HIDIOCSUSAGE _IOW('H', 0x0C, struct hiddev_usage_ref) -#define HIDIOCGUCODE _IOWR('H', 0x0D, struct hiddev_usage_ref) -#define HIDIOCGFLAG _IOR('H', 0x0E, int) -#define HIDIOCSFLAG _IOW('H', 0x0F, int) +#define HIDIOCGREPORTINFO _IOWR('H', 0x09, struct hiddev_report_info) +#define HIDIOCGFIELDINFO _IOWR('H', 0x0A, struct hiddev_field_info) +#define HIDIOCGUSAGE _IOWR('H', 0x0B, struct hiddev_usage_ref) +#define HIDIOCSUSAGE _IOW('H', 0x0C, struct hiddev_usage_ref) +#define HIDIOCGUCODE _IOWR('H', 0x0D, struct hiddev_usage_ref) +#define HIDIOCGFLAG _IOR('H', 0x0E, int) +#define HIDIOCSFLAG _IOW('H', 0x0F, int) /* * Flags to be used in HIDIOCSFLAG */ -#define HIDDEV_FLAG_UREF 0x1 -#define HIDDEV_FLAG_REPORT 0x2 -#define HIDDEV_FLAGS 0x3 +#define HIDDEV_FLAG_UREF 0x1 +#define HIDDEV_FLAG_REPORT 0x2 +#define HIDDEV_FLAGS 0x3 /* To traverse the input report descriptor info for a HID device, perform the * following: |
From: James S. <jsi...@us...> - 2002-04-16 19:32:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/ppc Modified Files: Config.help config.in Log Message: Synced to 2.5.8. Index: Config.help =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc/Config.help,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- Config.help 22 Mar 2002 20:13:57 -0000 1.3 +++ Config.help 16 Apr 2002 17:41:48 -0000 1.4 @@ -930,6 +930,16 @@ Include in-kernel hooks for the xmon kernel monitor/debugger supported by the PPC port. +Include BDI2000 debugger support +CONFIG_BDI_SWITCH + Include in-kernel support for the Abatron BDI2000 debugger. + +Add additional CFLAGS to the kernel build +CONFIG_MORE_COMPILE_OPTIONS + If you want to add additional CFLAGS to the kernel build, such as + -g for KGDB, XMON or the BDI2000, enable this option and then + enter what you would like to add in the next question. + CONFIG_ADVANCED_OPTIONS This option will enable prompting for a variety of advanced kernel configuration options. These options can cause the kernel to not Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc/config.in,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- config.in 22 Mar 2002 20:13:57 -0000 1.28 +++ config.in 16 Apr 2002 17:41:48 -0000 1.29 @@ -24,27 +24,27 @@ iSeries CONFIG_PPC_ISERIES" 6xx if [ "$CONFIG_6xx" = "y" ]; then - bool 'MPC8260 CPM Support' CONFIG_8260 + bool 'MPC8260 CPM Support' CONFIG_8260 fi if [ "$CONFIG_POWER3" = "y" ]; then - define_bool CONFIG_PPC64BRIDGE y - define_bool CONFIG_ALL_PPC y + define_bool CONFIG_PPC64BRIDGE y + define_bool CONFIG_ALL_PPC y fi if [ "$CONFIG_PPC_ISERIES" = "y" ]; then - define_bool CONFIG_PPC64BRIDGE y + define_bool CONFIG_PPC64BRIDGE y fi if [ "$CONFIG_6xx" = "y" -o "$CONFIG_POWER3" = "y" ]; then - define_bool CONFIG_PPC_STD_MMU y + define_bool CONFIG_PPC_STD_MMU y else - define_bool CONFIG_PPC_STD_MMU n + define_bool CONFIG_PPC_STD_MMU n fi if [ "$CONFIG_8260" = "y" ]; then - define_bool CONFIG_SERIAL_CONSOLE y - choice 'Machine Type' \ + define_bool CONFIG_SERIAL_CONSOLE y + choice 'Machine Type' \ "EST8260 CONFIG_EST8260 \ SBS8260 CONFIG_SBS8260 \ RPXSUPER CONFIG_RPX6 \ @@ -66,10 +66,10 @@ fi if [ "$CONFIG_8xx" = "y" ]; then - define_bool CONFIG_SERIAL_CONSOLE y - define_bool CONFIG_NOT_COHERENT_CACHE y + define_bool CONFIG_SERIAL_CONSOLE y + define_bool CONFIG_NOT_COHERENT_CACHE y - choice 'Machine Type' \ + choice 'Machine Type' \ "RPX-Lite CONFIG_RPXLITE \ RPX-Classic CONFIG_RPXCLASSIC \ BSE-IP CONFIG_BSEIP \ @@ -92,18 +92,18 @@ MBX CONFIG_MBX \ WinCept CONFIG_WINCEPT" RPX-Lite - if [ "$CONFIG_TQM823L" = "y" -o \ + if [ "$CONFIG_TQM823L" = "y" -o \ "$CONFIG_TQM850L" = "y" -o \ "$CONFIG_FPS850L" = "y" -o \ "$CONFIG_TQM855L" = "y" -o \ "$CONFIG_TQM860L" = "y" -o \ "$CONFIG_SM850" = "y" ]; then - define_bool CONFIG_TQM8xxL y - fi + define_bool CONFIG_TQM8xxL y + fi fi if [ "$CONFIG_6xx" = "y" -a "$CONFIG_8260" = "n" ]; then - choice 'Machine Type' \ + choice 'Machine Type' \ "CHRP/PowerMac/PReP CONFIG_ALL_PPC \ Amiga-APUS CONFIG_APUS \ Cogent-Willow CONFIG_WILLOW \ @@ -125,133 +125,130 @@ Zynx-ZX4500 CONFIG_ZX4500" CHRP/PowerMac/PReP fi -if [ "$CONFIG_PCORE" = "y" \ - -o "$CONFIG_POWERPMC250" = "y" ]; then - define_bool CONFIG_FORCE y +if [ "$CONFIG_PCORE" = "y" -o "$CONFIG_POWERPMC250" = "y" ]; then + define_bool CONFIG_FORCE y fi -if [ "$CONFIG_FORCE" = "y" \ - -o "$CONFIG_MENF1" = "y" \ - -o "$CONFIG_SANDPOINT" = "y" \ - -o "$CONFIG_ZX4500" = "y" ]; then - bool 'Enable MPC10x store gathering' CONFIG_MPC10X_STORE_GATHERING +if [ "$CONFIG_FORCE" = "y" -o "$CONFIG_MENF1" = "y" \ + -o "$CONFIG_SANDPOINT" = "y" -o "$CONFIG_ZX4500" = "y" ]; then + bool 'Enable MPC10x store gathering' CONFIG_MPC10X_STORE_GATHERING fi if [ "$CONFIG_EV64260" = "y" ]; then - define_bool CONFIG_GT64260 y - define_int CONFIG_SERIAL_CONSOLE_BAUD 115200 + define_bool CONFIG_GT64260 y + define_int CONFIG_SERIAL_CONSOLE_BAUD 115200 fi if [ "$CONFIG_K2" = "y" ]; then - bool 'Enable CPC710 data gathering' CONFIG_CPC710_DATA_GATHERING + bool 'Enable CPC710 data gathering' CONFIG_CPC710_DATA_GATHERING fi if [ "$CONFIG_MVME5100" = "y" ]; then - bool 'MVME5100 configured with an IPMC761' CONFIG_MVME5100_IPMC761_PRESENT + bool 'MVME5100 configured with an IPMC761' CONFIG_MVME5100_IPMC761_PRESENT fi if [ "$CONFIG_SANDPOINT" = "y" ]; then - bool 'Sandpoint X3' CONFIG_SANDPOINT_X3 - if [ "$CONFIG_SANDPOINT_X3" = "y" ]; then - define_bool CONFIG_EPIC_SERIAL_MODE y - fi + bool 'Sandpoint X3' CONFIG_SANDPOINT_X3 + if [ "$CONFIG_SANDPOINT_X3" = "y" ]; then + define_bool CONFIG_EPIC_SERIAL_MODE y + fi fi if [ "$CONFIG_SPRUCE" = "y" ]; then - bool 'Spruce baud clock support' CONFIG_SPRUCE_BAUD_33M + bool 'Spruce baud clock support' CONFIG_SPRUCE_BAUD_33M fi if [ "$CONFIG_PPC_STD_MMU" != "y" ]; then - define_bool CONFIG_ALL_PPC n + define_bool CONFIG_ALL_PPC n fi bool 'Symmetric multi-processing support' CONFIG_SMP if [ "$CONFIG_SMP" = "y" ]; then - bool ' Distribute interrupts on all CPUs by default' CONFIG_IRQ_ALL_CPUS + bool ' Distribute interrupts on all CPUs by default' CONFIG_IRQ_ALL_CPUS fi define_bool CONFIG_PREEMPT n if [ "$CONFIG_6xx" = "y" -a "$CONFIG_8260" = "n" ];then - bool 'AltiVec Support' CONFIG_ALTIVEC - bool 'Thermal Management Support' CONFIG_TAU - if [ "$CONFIG_TAU" = "y" ]; then - bool ' Interrupt driven TAU driver (DANGEROUS)' CONFIG_TAU_INT - bool ' Average high and low temp' CONFIG_TAU_AVERAGE - fi + bool 'AltiVec Support' CONFIG_ALTIVEC + bool 'Thermal Management Support' CONFIG_TAU + if [ "$CONFIG_TAU" = "y" ]; then + bool ' Interrupt driven TAU driver (DANGEROUS)' CONFIG_TAU_INT + bool ' Average high and low temp' CONFIG_TAU_AVERAGE + fi fi if [ "$CONFIG_4xx" = "y" -o "$CONFIG_8xx" = "y" ]; then - bool 'Math emulation' CONFIG_MATH_EMULATION + bool 'Math emulation' CONFIG_MATH_EMULATION fi if [ "$CONFIG_4xx" = "y" ]; then # It's often necessary to know the specific 4xx processor type. # Fortunately, it is impled (so far) from the board type, so we # don't need to ask more redundant questions. - if [ "$CONFIG_ASH" = "y" ]; then - define_bool CONFIG_NP405H y - define_bool CONFIG_TREEBOOT y - define_bool CONFIG_IBM405_ERR77 y - define_bool CONFIG_IBM_OCP y - fi - if [ "$CONFIG_CEDER" = "y" ]; then - define_bool CONFIG_NP405L y - define_bool CONFIG_BIOS_FIXUP y - define_bool CONFIG_TREEBOOT y - define_bool CONFIG_IBM405_ERR77 y - define_bool CONFIG_IBM_OCP y - fi - if [ "$CONFIG_CPCI405" = "y" ]; then - define_bool CONFIG_405GP y - define_bool CONFIG_IBM405_ERR77 y - define_bool CONFIG_IBM_OCP y - fi - if [ "$CONFIG_EP405" = "y" ]; then - define_bool CONFIG_405GP y - define_bool CONFIG_BIOS_FIXUP y - define_bool CONFIG_EMBEDDEDBOOT y - define_bool CONFIG_IBM405_ERR77 y - define_bool CONFIG_IBM_OCP y - fi - if [ "$CONFIG_OAK" = "y" -o "$CONFIG_TIVO" = "y" ]; then - define_bool CONFIG_403GCX y - define_bool CONFIG_TREEBOOT y - fi - if [ "$CONFIG_REDWOOD_4" = "y" ]; then - define_bool CONFIG_STB03xxx y - define_bool CONFIG_TREEBOOT y - define_bool CONFIG_IBM405_ERR77 y - define_bool CONFIG_IBM_OCP y - fi - if [ "$CONFIG_REDWOOD_5" = "y" ]; then - define_bool CONFIG_STB03xxx y - define_bool CONFIG_TREEBOOT y - define_bool CONFIG_IBM405_ERR77 y - define_bool CONFIG_IBM_OCP y - fi - if [ "$CONFIG_WALNUT" = "y" ]; then - define_bool CONFIG_405GP y - define_bool CONFIG_BIOS_FIXUP y - define_bool CONFIG_TREEBOOT y - define_bool CONFIG_IBM405_ERR77 y - define_bool CONFIG_IBM_OCP y - fi + if [ "$CONFIG_ASH" = "y" ]; then + define_bool CONFIG_NP405H y + define_bool CONFIG_TREEBOOT y + define_bool CONFIG_IBM405_ERR77 y + define_bool CONFIG_IBM_OCP y + fi + if [ "$CONFIG_CEDER" = "y" ]; then + define_bool CONFIG_NP405L y + define_bool CONFIG_BIOS_FIXUP y + define_bool CONFIG_TREEBOOT y + define_bool CONFIG_IBM405_ERR77 y + define_bool CONFIG_IBM_OCP y + fi + if [ "$CONFIG_CPCI405" = "y" ]; then + define_bool CONFIG_405GP y + define_bool CONFIG_IBM405_ERR77 y + define_bool CONFIG_IBM_OCP y + fi + if [ "$CONFIG_EP405" = "y" ]; then + define_bool CONFIG_405GP y + define_bool CONFIG_BIOS_FIXUP y + define_bool CONFIG_EMBEDDEDBOOT y + define_bool CONFIG_IBM405_ERR77 y + define_bool CONFIG_IBM_OCP y + fi + if [ "$CONFIG_OAK" = "y" -o "$CONFIG_TIVO" = "y" ]; then + define_bool CONFIG_403GCX y + define_bool CONFIG_TREEBOOT y + fi + if [ "$CONFIG_REDWOOD_4" = "y" ]; then + define_bool CONFIG_STB03xxx y + define_bool CONFIG_TREEBOOT y + define_bool CONFIG_IBM405_ERR77 y + define_bool CONFIG_IBM_OCP y + fi + if [ "$CONFIG_REDWOOD_5" = "y" ]; then + define_bool CONFIG_STB03xxx y + define_bool CONFIG_TREEBOOT y + define_bool CONFIG_IBM405_ERR77 y + define_bool CONFIG_IBM_OCP y + fi + if [ "$CONFIG_WALNUT" = "y" ]; then + define_bool CONFIG_405GP y + define_bool CONFIG_BIOS_FIXUP y + define_bool CONFIG_TREEBOOT y + define_bool CONFIG_IBM405_ERR77 y + define_bool CONFIG_IBM_OCP y + fi - bool 'Blue Logic DMA' CONFIG_405_DMA - dep_bool 'Power Management support (experimental)' CONFIG_PM $CONFIG_EXPERIMENTAL + bool 'Blue Logic DMA' CONFIG_405_DMA + dep_bool 'Power Management support (experimental)' CONFIG_PM $CONFIG_EXPERIMENTAL - if [ "$CONFIG_4xx" = "y" ]; then - choice 'TTYS0 device and default console' \ + if [ "$CONFIG_4xx" = "y" ]; then + choice 'TTYS0 device and default console' \ "UART0 CONFIG_UART0_TTYS0 \ UART1 CONFIG_UART0_TTYS1" UART0 - fi + fi - define_bool CONFIG_IBM405_ERR51 y - define_bool CONFIG_NOT_COHERENT_CACHE y + define_bool CONFIG_IBM405_ERR51 y + define_bool CONFIG_NOT_COHERENT_CACHE y fi if [ "$CONFIG_8xx" = "y" -o "$CONFIG_8260" = "y" ]; then - define_bool CONFIG_EMBEDDEDBOOT y + define_bool CONFIG_EMBEDDEDBOOT y fi endmenu @@ -262,43 +259,43 @@ dep_bool ' Support for PTEs in high memory' CONFIG_HIGHPTE $CONFIG_HIGHMEM bool 'Prompt for advanced kernel configuration options' CONFIG_ADVANCED_OPTIONS if [ "$CONFIG_ADVANCED_OPTIONS" = "y" ]; then - if [ "$CONFIG_HIGHMEM" = "y" ]; then - bool " Set high memory pool address" CONFIG_HIGHMEM_START_BOOL - if [ "$CONFIG_HIGHMEM_START_BOOL" = "y" ]; then - hex " Virtual start address of high memory pool" CONFIG_HIGHMEM_START 0xfe000000 - fi - bool " Set maximum low memory" CONFIG_LOWMEM_SIZE_BOOL - if [ "$CONFIG_LOWMEM_SIZE_BOOL" = "y" ]; then - hex " Maximum low memory size (in bytes)" CONFIG_LOWMEM_SIZE 0x20000000 - fi - fi + if [ "$CONFIG_HIGHMEM" = "y" ]; then + bool " Set high memory pool address" CONFIG_HIGHMEM_START_BOOL + if [ "$CONFIG_HIGHMEM_START_BOOL" = "y" ]; then + hex " Virtual start address of high memory pool" CONFIG_HIGHMEM_START 0xfe000000 + fi + bool " Set maximum low memory" CONFIG_LOWMEM_SIZE_BOOL + if [ "$CONFIG_LOWMEM_SIZE_BOOL" = "y" ]; then + hex " Maximum low memory size (in bytes)" CONFIG_LOWMEM_SIZE 0x20000000 + fi + fi - bool "Set custom kernel base address" CONFIG_KERNEL_START_BOOL - if [ "$CONFIG_KERNEL_START_BOOL" = "y" ]; then - hex " Virtual address of kernel base" CONFIG_KERNEL_START 0xc0000000 - fi - bool "Set custom user task size" CONFIG_TASK_SIZE_BOOL - if [ "$CONFIG_TASK_SIZE_BOOL" = "y" ]; then - hex " Size of user task space" CONFIG_TASK_SIZE 0x80000000 - fi - if [ "$CONFIG_8xx" = "y" ]; then - bool "Pinned Kernel TLBs (860 ONLY)" CONFIG_PIN_TLB - fi - if [ "$CONFIG_4xx" = "y" ]; then - bool "Pinned Kernel TLBs" CONFIG_PIN_TLB - fi - if [ "$CONFIG_ALL_PPC" = "n" ]; then - bool "Set the boot link/load address" CONFIG_BOOT_LOAD_BOOL - if [ "$CONFIG_BOOT_LOAD_BOOL" = "y" ]; then - hex " Link/load address for booting" CONFIG_BOOT_LOAD 0x00400000 - fi - fi + bool "Set custom kernel base address" CONFIG_KERNEL_START_BOOL + if [ "$CONFIG_KERNEL_START_BOOL" = "y" ]; then + hex " Virtual address of kernel base" CONFIG_KERNEL_START 0xc0000000 + fi + bool "Set custom user task size" CONFIG_TASK_SIZE_BOOL + if [ "$CONFIG_TASK_SIZE_BOOL" = "y" ]; then + hex " Size of user task space" CONFIG_TASK_SIZE 0x80000000 + fi + if [ "$CONFIG_8xx" = "y" ]; then + bool "Pinned Kernel TLBs (860 ONLY)" CONFIG_PIN_TLB + fi + if [ "$CONFIG_4xx" = "y" ]; then + bool "Pinned Kernel TLBs" CONFIG_PIN_TLB + fi + if [ "$CONFIG_ALL_PPC" != "y" ]; then + bool "Set the boot link/load address" CONFIG_BOOT_LOAD_BOOL + if [ "$CONFIG_BOOT_LOAD_BOOL" = "y" ]; then + hex " Link/load address for booting" CONFIG_BOOT_LOAD 0x00400000 + fi + fi fi if [ "$CONFIG_ALL_PPC" = "y" ]; then - bool 'Support for ISA-bus hardware' CONFIG_ISA + bool 'Support for ISA-bus hardware' CONFIG_ISA else - define_bool CONFIG_ISA n + define_bool CONFIG_ISA n fi define_bool CONFIG_EISA n define_bool CONFIG_SBUS n @@ -307,30 +304,30 @@ define_bool CONFIG_MCA n if [ "$CONFIG_4xx" = "y" -o "$CONFIG_8260" = "y" ]; then - bool "Enable PCI" CONFIG_PCI - bool 'PC PS/2 style Keyboard' CONFIG_PC_KEYBOARD + bool "Enable PCI" CONFIG_PCI + bool 'PC PS/2 style Keyboard' CONFIG_PC_KEYBOARD else - if [ "$CONFIG_8xx" = "y" ]; then - bool 'QSpan PCI' CONFIG_PCI_QSPAN - define_bool CONFIG_PCI $CONFIG_PCI_QSPAN - else - if [ "$CONFIG_APUS" = "y" ]; then - bool 'PCI for Permedia2' CONFIG_PCI_PERMEDIA - define_bool CONFIG_PCI $CONFIG_PCI_PERMEDIA - else - if [ "$CONFIG_PPC_ISERIES" = "y" ]; then - bool "IBM iSeries Native I/O Support" CONFIG_PCI_ISERIES - define_bool CONFIG_PCI $CONFIG_PCI_ISERIES - else - define_bool CONFIG_PCI y - fi - fi - fi + if [ "$CONFIG_8xx" = "y" ]; then + bool 'QSpan PCI' CONFIG_PCI_QSPAN + define_bool CONFIG_PCI $CONFIG_PCI_QSPAN + else + if [ "$CONFIG_APUS" = "y" ]; then + bool 'PCI for Permedia2' CONFIG_PCI_PERMEDIA + define_bool CONFIG_PCI $CONFIG_PCI_PERMEDIA + else + if [ "$CONFIG_PPC_ISERIES" = "y" ]; then + bool "IBM iSeries Native I/O Support" CONFIG_PCI_ISERIES + define_bool CONFIG_PCI $CONFIG_PCI_ISERIES + else + define_bool CONFIG_PCI y + fi + fi + fi fi # only elf supported, a.out is not -- Cort if [ "$CONFIG_PROC_FS" = "y" ]; then - define_bool CONFIG_KCORE_ELF y + define_bool CONFIG_KCORE_ELF y fi define_bool CONFIG_BINFMT_ELF y define_bool CONFIG_KERNEL_ELF y @@ -341,67 +338,70 @@ bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG if [ "$CONFIG_HOTPLUG" = "y" ]; then - source drivers/pcmcia/Config.in + source drivers/pcmcia/Config.in else - define_bool CONFIG_PCMCIA n + define_bool CONFIG_PCMCIA n fi source drivers/parport/Config.in if [ "$CONFIG_PPC_ISERIES" != "y" ]; then - if [ "$CONFIG_APUS" != "y" ]; then - tristate 'Support for /dev/rtc' CONFIG_PPC_RTC - else - bool 'Generic /dev/rtc emulation' CONFIG_GEN_RTC - fi + if [ "$CONFIG_APUS" != "y" ]; then + tristate 'Support for /dev/rtc' CONFIG_PPC_RTC + else + bool 'Generic /dev/rtc emulation' CONFIG_GEN_RTC + fi fi if [ "$CONFIG_ALL_PPC" = "y" -a "$CONFIG_POWER3" = "n" ] ; then - bool 'Workarounds for PPC601 bugs' CONFIG_PPC601_SYNC_FIX + bool 'Workarounds for PPC601 bugs' CONFIG_PPC601_SYNC_FIX fi if [ "$CONFIG_ALL_PPC" = "y" ]; then - bool 'Support for Open Firmware device tree in /proc' CONFIG_PROC_DEVICETREE - bool 'Support for RTAS (RunTime Abstraction Services) in /proc' CONFIG_PPC_RTAS - bool 'Support for PReP Residual Data' CONFIG_PREP_RESIDUAL + bool 'Support for Open Firmware device tree in /proc' CONFIG_PROC_DEVICETREE + bool 'Support for RTAS (RunTime Abstraction Services) in /proc' CONFIG_PPC_RTAS + bool 'Support for PReP Residual Data' CONFIG_PREP_RESIDUAL fi bool 'Default bootloader kernel arguments' CONFIG_CMDLINE_BOOL if [ "$CONFIG_CMDLINE_BOOL" = "y" ] ; then - string 'Initial kernel command string' CONFIG_CMDLINE "console=ttyS0,9600 console=tty0 root=/dev/sda2" + string 'Initial kernel command string' CONFIG_CMDLINE "console=ttyS0,9600 console=tty0 root=/dev/sda2" fi if [ "$CONFIG_APUS" = "y" ]; then - define_bool CONFIG_FRAMEBUFFER_CONSOLE y - define_bool CONFIG_AMIGA y - define_bool CONFIG_ZORRO y - define_bool CONFIG_ABSTRACT_CONSOLE y - define_bool CONFIG_FB y - define_bool CONFIG_APUS_FAST_EXCEPT y + define_bool CONFIG_FRAMEBUFFER_CONSOLE y + define_bool CONFIG_AMIGA y + define_bool CONFIG_ZORRO y + define_bool CONFIG_INPUT y + define_bool CONFIG_INPUT_MOUSE y + define_bool CONFIG_MOUSE_AMIGA y + define_bool CONFIG_ABSTRACT_CONSOLE y + define_bool CONFIG_FB y + define_bool CONFIG_APUS_FAST_EXCEPT y - if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then - bool 'Amiga 1200/600 PCMCIA support' CONFIG_AMIGA_PCMCIA - fi + if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then + bool 'Amiga 1200/600 PCMCIA support' CONFIG_AMIGA_PCMCIA + fi - tristate 'Amiga builtin serial support' CONFIG_AMIGA_BUILTIN_SERIAL - tristate 'GVP IO-Extender support' CONFIG_GVPIOEXT - dep_tristate 'GVP IO-Extender parallel printer support' CONFIG_GVPIOEXT_LP $CONFIG_GVPIOEXT - dep_tristate 'GVP IO-Extender PLIP support' CONFIG_GVPIOEXT_PLIP $CONFIG_GVPIOEXT - tristate 'Multiface Card III serial support' CONFIG_MULTIFACE_III_TTY - if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then + tristate 'Amiga builtin serial support' CONFIG_AMIGA_BUILTIN_SERIAL + tristate 'GVP IO-Extender support' CONFIG_GVPIOEXT + dep_tristate 'GVP IO-Extender parallel printer support' CONFIG_GVPIOEXT_LP $CONFIG_GVPIOEXT + dep_tristate 'GVP IO-Extender PLIP support' CONFIG_GVPIOEXT_PLIP $CONFIG_GVPIOEXT + tristate 'Multiface Card III serial support' CONFIG_MULTIFACE_III_TTY + if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then tristate 'Commodore A2232 serial support (EXPERIMENTAL)' CONFIG_A2232 - fi - if [ "$CONFIG_AMIGA_PCMCIA" = "y" ]; then - tristate 'Hisoft Whippet PCMCIA serial support' CONFIG_WHIPPET_SERIAL - tristate 'PCMCIA NE2000 support' CONFIG_APNE - fi - if [ "$CONFIG_AMIGA_BUILTIN_SERIAL" = "y" -o "$CONFIG_GVPIOEXT" = "y" -o \ - "$CONFIG_MULTIFACE_III_TTY" = "y" ]; then - bool 'Support for serial port console' CONFIG_SERIAL_CONSOLE - fi - bool 'Use power LED as a heartbeat' CONFIG_HEARTBEAT - bool '/proc/hardware support' CONFIG_PROC_HARDWARE - source drivers/zorro/Config.in + fi + if [ "$CONFIG_AMIGA_PCMCIA" = "y" ]; then + tristate 'Hisoft Whippet PCMCIA serial support' CONFIG_WHIPPET_SERIAL + tristate 'PCMCIA NE2000 support' CONFIG_APNE + fi + if [ "$CONFIG_AMIGA_BUILTIN_SERIAL" = "y" -o "$CONFIG_GVPIOEXT" = "y" -o \ + "$CONFIG_MULTIFACE_III_TTY" = "y" ]; then + bool 'Support for serial port console' CONFIG_SERIAL_CONSOLE + fi + bool 'Use power LED as a heartbeat' CONFIG_HEARTBEAT + bool '/proc/hardware support' CONFIG_PROC_HARDWARE + source drivers/zorro/Config.in fi endmenu @@ -411,18 +411,17 @@ source drivers/md/Config.in if [ "$CONFIG_NET" = "y" ]; then - source net/Config.in + source net/Config.in fi mainmenu_option next_comment comment 'ATA/IDE/MFM/RLL support' tristate 'ATA/IDE/MFM/RLL support' CONFIG_IDE - if [ "$CONFIG_IDE" != "n" ]; then - source drivers/ide/Config.in + source drivers/ide/Config.in else - define_bool CONFIG_BLK_DEV_HD n + define_bool CONFIG_BLK_DEV_HD n fi endmenu @@ -430,7 +429,7 @@ comment 'SCSI support' tristate 'SCSI support' CONFIG_SCSI if [ "$CONFIG_SCSI" != "n" ]; then - source drivers/scsi/Config.in + source drivers/scsi/Config.in fi endmenu @@ -441,17 +440,17 @@ source drivers/message/i2o/Config.in if [ "$CONFIG_NET" = "y" ]; then - mainmenu_option next_comment - comment 'Network device support' + mainmenu_option next_comment + comment 'Network device support' - bool 'Network device support' CONFIG_NETDEVICES - if [ "$CONFIG_NETDEVICES" = "y" ]; then - source drivers/net/Config.in - if [ "$CONFIG_ATM" = "y" ]; then - source drivers/atm/Config.in - fi - fi - endmenu + bool 'Network device support' CONFIG_NETDEVICES + if [ "$CONFIG_NETDEVICES" = "y" ]; then + source drivers/net/Config.in + if [ "$CONFIG_ATM" = "y" ]; then + source drivers/atm/Config.in + fi + fi + endmenu fi source net/ax25/Config.in @@ -463,19 +462,20 @@ tristate 'ISDN support' CONFIG_ISDN if [ "$CONFIG_ISDN" != "n" ]; then - source drivers/isdn/Config.in + source drivers/isdn/Config.in fi endmenu mainmenu_option next_comment comment 'Old CD-ROM drivers (not SCSI, not IDE)' - bool 'Support non-SCSI/IDE/ATAPI CDROM drives' CONFIG_CD_NO_IDESCSI if [ "$CONFIG_CD_NO_IDESCSI" != "n" ]; then - source drivers/cdrom/Config.in + source drivers/cdrom/Config.in fi endmenu +source drivers/video/Config.in + if [ "$CONFIG_PPC_ISERIES" = "y" ]; then mainmenu_option next_comment comment 'iSeries device drivers' @@ -494,57 +494,56 @@ -o "$CONFIG_VIOTAPE" != "n" -o "$CONFIG_VIOCD" != "n" ]; then define_bool CONFIG_VIOPATH y fi + if [ "$CONFIG_VIOCD" = "y" ]; then + define_bool CONFIG_CD_NO_IDESCSI y + define_bool CONFIG_BLK_DEV_IDECD y + fi endmenu fi -if [ "$CONFIG_VIOCD" = "y" ]; then - define_bool CONFIG_CD_NO_IDESCSI y - define_bool CONFIG_BLK_DEV_IDECD y -fi - source drivers/input/Config.in mainmenu_option next_comment comment 'Macintosh device drivers' if [ "$CONFIG_ALL_PPC" = "y" ]; then - # we want to change this to something like CONFIG_SYSCTRL_CUDA/PMU - bool 'Support for CUDA based PowerMacs' CONFIG_ADB_CUDA - bool 'Support for PMU based PowerMacs' CONFIG_ADB_PMU - if [ "$CONFIG_ADB_PMU" = "y" ]; then - bool ' Power management support for PowerBooks' CONFIG_PMAC_PBOOK - if [ "$CONFIG_PMAC_PBOOK" = "y" ]; then - define_bool CONFIG_PM y - tristate ' APM emulation' CONFIG_PMAC_APM_EMU - fi - # made a separate option since backlight may end up beeing used - # on non-powerbook machines (but only on PMU based ones AFAIK) - bool ' Backlight control for LCD screens' CONFIG_PMAC_BACKLIGHT - fi - bool 'Support for PowerMac floppy' CONFIG_MAC_FLOPPY - tristate 'Support for PowerMac serial ports' CONFIG_MAC_SERIAL - if [ "$CONFIG_MAC_SERIAL" = "y" ]; then - bool ' Support for console on serial port' CONFIG_SERIAL_CONSOLE - fi - bool 'Apple Desktop Bus (ADB) support' CONFIG_ADB - if [ "$CONFIG_ADB" = "y" ]; then - bool ' Include MacIO (CHRP) ADB driver' CONFIG_ADB_MACIO - dep_bool ' Use input layer for ADB devices' CONFIG_INPUT_ADBHID $CONFIG_INPUT - if [ "$CONFIG_INPUT_ADBHID" = "y" ]; then - bool ' Support for ADB raw keycodes' CONFIG_MAC_ADBKEYCODES - bool ' Support for mouse button 2+3 emulation' CONFIG_MAC_EMUMOUSEBTN - else - bool ' Support for ADB keyboard (old driver)' CONFIG_ADB_KEYBOARD - fi - fi - # This is for drivers/macintosh/mac_hid.o, which is needed if the input - # layer is used. - if [ "$CONFIG_INPUT" != "n" ]; then - define_bool CONFIG_MAC_HID y - fi - if [ "$CONFIG_ADB_CUDA" != "n" ]; then - bool 'Support for ANS LCD display' CONFIG_ANSLCD - fi + # we want to change this to something like CONFIG_SYSCTRL_CUDA/PMU + bool 'Support for CUDA based PowerMacs' CONFIG_ADB_CUDA + bool 'Support for PMU based PowerMacs' CONFIG_ADB_PMU + if [ "$CONFIG_ADB_PMU" = "y" ]; then + bool ' Power management support for PowerBooks' CONFIG_PMAC_PBOOK + if [ "$CONFIG_PMAC_PBOOK" = "y" ]; then + define_bool CONFIG_PM y + tristate ' APM emulation' CONFIG_PMAC_APM_EMU + fi + # made a separate option since backlight may end up beeing used + # on non-powerbook machines (but only on PMU based ones AFAIK) + bool ' Backlight control for LCD screens' CONFIG_PMAC_BACKLIGHT + fi + bool 'Support for PowerMac floppy' CONFIG_MAC_FLOPPY + tristate 'Support for PowerMac serial ports' CONFIG_MAC_SERIAL + if [ "$CONFIG_MAC_SERIAL" = "y" ]; then + bool ' Support for console on serial port' CONFIG_SERIAL_CONSOLE + fi + bool 'Apple Desktop Bus (ADB) support' CONFIG_ADB + if [ "$CONFIG_ADB" = "y" ]; then + bool ' Include MacIO (CHRP) ADB driver' CONFIG_ADB_MACIO + dep_bool ' Use input layer for ADB devices' CONFIG_INPUT_ADBHID $CONFIG_INPUT + if [ "$CONFIG_INPUT_ADBHID" = "y" ]; then + bool ' Support for ADB raw keycodes' CONFIG_MAC_ADBKEYCODES + bool ' Support for mouse button 2+3 emulation' CONFIG_MAC_EMUMOUSEBTN + else + bool ' Support for ADB keyboard (old driver)' CONFIG_ADB_KEYBOARD + fi + fi + # This is for drivers/macintosh/mac_hid.o, which is needed if the input + # layer is used. + if [ "$CONFIG_INPUT" != "n" ]; then + define_bool CONFIG_MAC_HID y + fi + if [ "$CONFIG_ADB_CUDA" != "n" ]; then + bool 'Support for ANS LCD display' CONFIG_ANSLCD + fi fi endmenu @@ -558,35 +557,33 @@ comment 'Sound' tristate 'Sound card support' CONFIG_SOUND if [ "$CONFIG_SOUND" != "n" ]; then - source sound/oss/dmasound/Config.in - source sound/Config.in + source sound/oss/dmasound/Config.in + source sound/Config.in fi - endmenu if [ "$CONFIG_8xx" = "y" ]; then -source arch/ppc/8xx_io/Config.in + source arch/ppc/8xx_io/Config.in fi if [ "$CONFIG_8260" = "y" ]; then -source arch/ppc/8260_io/Config.in + source arch/ppc/8260_io/Config.in fi if [ "$CONFIG_4xx" = "y"]; then - mainmenu_option next_comment - comment 'IBM 4xx options' - if [ "$CONFIG_STB03xxx" = "y" ]; then - bool 'STB IR Keyboard' CONFIG_STB_KB - bool 'SICC Serial port' CONFIG_SERIAL_SICC - if [ "$CONFIG_SERIAL_SICC" = "y" -a "$CONFIG_UART0_TTYS1" = "y" ]; then - define_bool CONFIG_UART1_DFLT_CONSOLE y - define_bool CONFIG_SERIAL_SICC_CONSOLE y + mainmenu_option next_comment + comment 'IBM 4xx options' + if [ "$CONFIG_STB03xxx" = "y" ]; then + bool 'STB IR Keyboard' CONFIG_STB_KB + bool 'SICC Serial port' CONFIG_SERIAL_SICC + if [ "$CONFIG_SERIAL_SICC" = "y" -a "$CONFIG_UART0_TTYS1" = "y" ]; then + define_bool CONFIG_UART1_DFLT_CONSOLE y + define_bool CONFIG_SERIAL_SICC_CONSOLE y + fi fi - fi - endmenu + endmenu fi -source drivers/video/Config.in source drivers/usb/Config.in if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then @@ -601,7 +598,7 @@ bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ bool 'Include kgdb kernel debugger' CONFIG_KGDB if [ "$CONFIG_KGDB" = "y" ]; then - choice 'Serial Port' \ + choice 'Serial Port' \ "ttyS0 CONFIG_KGDB_TTYS0 \ ttyS1 CONFIG_KGDB_TTYS1 \ ttyS2 CONFIG_KGDB_TTYS2 \ @@ -610,19 +607,19 @@ bool 'Include xmon kernel debugger' CONFIG_XMON bool 'Include BDI-2000 user context switcher' CONFIG_BDI_SWITCH if [ "$CONFIG_KGDB" = "y" -o "$CONFIG_XMON" = "y" \ - -o "$CONFIG_BDI_SWITCH" = "y" ]; then - bool 'Add any additional compile options' CONFIG_MORE_COMPILE_OPTIONS - if [ "$CONFIG_MORE_COMPILE_OPTIONS" = "y" ]; then - string 'Additional compile arguments' CONFIG_COMPILE_OPTIONS "-g -ggdb" - fi + -o "$CONFIG_BDI_SWITCH" = "y" ]; then + bool 'Add any additional compile options' CONFIG_MORE_COMPILE_OPTIONS + if [ "$CONFIG_MORE_COMPILE_OPTIONS" = "y" ]; then + string 'Additional compile arguments' CONFIG_COMPILE_OPTIONS "-g -ggdb" + fi fi if [ "$CONFIG_ALL_PPC" = "y" ]; then - bool 'Support for early boot text console (BootX or OpenFirmware only)' CONFIG_BOOTX_TEXT + bool 'Support for early boot text console (BootX or OpenFirmware only)' CONFIG_BOOTX_TEXT fi if [ "$CONFIG_MCPN765" = "y" -o "$CONFIG_SANDPOINT" = "y" \ - -o "$CONFIG_ZX4500" = "y" -o "$CONFIG_PRPMC800" = "y" \ - -o "$CONFIG_4xx" = "y" -o "$CONFIG_GT64260" = "y" ]; then - bool 'Support for early boot texts over serial port' CONFIG_SERIAL_TEXT_DEBUG + -o "$CONFIG_ZX4500" = "y" -o "$CONFIG_PRPMC800" = "y" \ + -o "$CONFIG_4xx" = "y" -o "$CONFIG_GT64260" = "y" ]; then + bool 'Support for early boot texts over serial port' CONFIG_SERIAL_TEXT_DEBUG fi endmenu |
From: James S. <jsi...@us...> - 2002-04-16 19:32:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/i386/kernel In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/i386/kernel Modified Files: dmi_scan.c setup.c Log Message: Synced to 2.5.8. Index: dmi_scan.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/i386/kernel/dmi_scan.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- dmi_scan.c 22 Mar 2002 20:13:57 -0000 1.5 +++ dmi_scan.c 16 Apr 2002 17:41:47 -0000 1.6 @@ -295,6 +295,22 @@ return 0; } +/* + * Work around broken HP Pavilion Notebooks which assign USB to + * IRQ 9 even though it is actually wired to IRQ 11 + */ +static __init int fix_broken_hp_bios_irq9(struct dmi_blacklist *d) +{ +#ifdef CONFIG_PCI + extern int broken_hp_bios_irq9; + if (broken_hp_bios_irq9 == 0) + { + broken_hp_bios_irq9 = 1; + printk(KERN_INFO "%s detected - fixing broken IRQ routing\n", d->ident); + } +#endif + return 0; +} /* * Check for clue free BIOS implementations who use @@ -430,6 +446,25 @@ } /* + * The Microstar 6163-2 (a.k.a Pro) mainboard will hang shortly after + * resumes, and also at what appears to be asynchronous APM events, + * if the local APIC is enabled. + */ +static int __init apm_kills_local_apic(struct dmi_blacklist *d) +{ +#ifdef CONFIG_X86_LOCAL_APIC + extern int dont_enable_local_apic; + if (apm_info.bios.version && !dont_enable_local_apic) { + dont_enable_local_apic = 1; + printk(KERN_WARNING "%s with broken BIOS detected. " + "Refusing to enable the local APIC.\n", + d->ident); + } +#endif + return 0; +} + +/* * The Intel AL440LX mainboard will hang randomly if the local APIC * timer is running and the APM BIOS hasn't been disabled. */ @@ -475,10 +510,10 @@ } }, #endif { broken_ps2_resume, "Dell Latitude C600", { /* Handle problems with APM on the C600 */ - MATCH(DMI_SYS_VENDOR, "Dell"), + MATCH(DMI_SYS_VENDOR, "Dell"), MATCH(DMI_PRODUCT_NAME, "Latitude C600"), NO_MATCH, NO_MATCH - } }, + } }, { broken_apm_power, "Dell Inspiron 5000e", { /* Handle problems with APM on Inspiron 5000e */ MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), MATCH(DMI_BIOS_VERSION, "A04"), @@ -504,6 +539,11 @@ MATCH(DMI_PRODUCT_NAME, "PowerEdge 300/"), NO_MATCH, NO_MATCH } }, + { set_bios_reboot, "Dell PowerEdge 2400", { /* Handle problems with rebooting on Dell 300/800's */ + MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), + MATCH(DMI_PRODUCT_NAME, "PowerEdge 2400"), + NO_MATCH, NO_MATCH + } }, { set_apm_ints, "Dell Inspiron", { /* Allow interrupts during suspend on Dell Inspiron laptops*/ MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), MATCH(DMI_PRODUCT_NAME, "Inspiron 4000"), @@ -525,12 +565,23 @@ MATCH(DMI_PRODUCT_NAME, "Delhi3"), NO_MATCH, NO_MATCH, } }, + { apm_is_horked, "Fujitsu-Siemens", { /* APM crashes */ + MATCH(DMI_BIOS_VENDOR, "hoenix/FUJITSU SIEMENS"), + MATCH(DMI_BIOS_VERSION, "Version1.01"), + NO_MATCH, NO_MATCH, + } }, { apm_is_horked, "Sharp PC-PJ/AX", { /* APM crashes */ MATCH(DMI_SYS_VENDOR, "SHARP"), MATCH(DMI_PRODUCT_NAME, "PC-PJ/AX"), MATCH(DMI_BIOS_VENDOR,"SystemSoft"), MATCH(DMI_BIOS_VERSION,"Version R2.08") } }, + { apm_is_horked, "Dell Inspiron 2500", { /* APM crashes */ + MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"), + MATCH(DMI_PRODUCT_NAME, "Inspiron 2500"), + MATCH(DMI_BIOS_VENDOR,"Phoenix Technologies LTD"), + MATCH(DMI_BIOS_VERSION,"A11") + } }, { sony_vaio_laptop, "Sony Vaio", { /* This is a Sony Vaio laptop */ MATCH(DMI_SYS_VENDOR, "Sony Corporation"), MATCH(DMI_PRODUCT_NAME, "PCG-"), @@ -540,7 +591,7 @@ MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), MATCH(DMI_BIOS_VERSION, "R0206H"), MATCH(DMI_BIOS_DATE, "08/23/99"), NO_MATCH - } }, + } }, { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-N505VX */ MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), @@ -566,6 +617,12 @@ MATCH(DMI_BIOS_DATE, "08/11/00"), NO_MATCH } }, + { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z600LEK(DE) */ + MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), + MATCH(DMI_BIOS_VERSION, "R0206Z3"), + MATCH(DMI_BIOS_DATE, "12/25/00"), NO_MATCH + } }, + { swab_apm_power_in_minutes, "Sony VAIO", { /* Handle problems with APM on Sony Vaio PCG-Z505LS */ MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"), MATCH(DMI_BIOS_VERSION, "R0203D0"), @@ -609,6 +666,17 @@ NO_MATCH, NO_MATCH } }, + { local_apic_kills_bios, "IBM Thinkpad T20", { + MATCH(DMI_BOARD_VENDOR, "IBM"), + MATCH(DMI_BOARD_NAME, "264741U"), + NO_MATCH, NO_MATCH + } }, + + { apm_kills_local_apic, "Microstar 6163", { + MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), + MATCH(DMI_BOARD_NAME, "MS-6163"), + NO_MATCH, NO_MATCH } }, + { apm_kills_local_apic_timer, "Intel AL440LX", { MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), MATCH(DMI_BOARD_NAME, "AL440LX"), @@ -666,7 +734,14 @@ NO_MATCH, NO_MATCH } }, - + { fix_broken_hp_bios_irq9, "HP Pavilion N5400 Series Laptop", { + MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), + MATCH(DMI_BIOS_VERSION, "GE.M1.03"), + MATCH(DMI_PRODUCT_VERSION, "HP Pavilion Notebook Model GE"), + MATCH(DMI_BOARD_VERSION, "OmniBook N32N-736") + } }, + + /* * Generic per vendor APM settings */ Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/i386/kernel/setup.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- setup.c 22 Mar 2002 20:13:57 -0000 1.38 +++ setup.c 16 Apr 2002 17:41:47 -0000 1.39 @@ -99,6 +99,8 @@ #endif #include <linux/highmem.h> #include <linux/bootmem.h> +#include <linux/pci.h> +#include <linux/pci_ids.h> #include <linux/seq_file.h> #include <asm/processor.h> #include <asm/mtrr.h> @@ -126,9 +128,6 @@ /* * Bus types .. */ -#ifdef CONFIG_EISA -int EISA_bus; -#endif int MCA_bus; /* for MCA, but anyone else can use it if they want */ @@ -207,6 +206,10 @@ { "dma2", 0xc0, 0xdf, IORESOURCE_BUSY }, { "fpu", 0xf0, 0xff, IORESOURCE_BUSY } }; +#ifdef CONFIG_MELAN +standard_io_resources[1] = { "pic1", 0x20, 0x21, IORESOURCE_BUSY }; +standard_io_resources[5] = { "pic2", 0xa0, 0xa1, IORESOURCE_BUSY }; +#endif #define STANDARD_IO_RESOURCES (sizeof(standard_io_resources)/sizeof(struct resource)) @@ -606,7 +609,7 @@ to--; if (!memcmp(from+4, "nopentium", 9)) { from += 9+4; - clear_bit(X86_FEATURE_PSE, &boot_cpu_data.x86_capability); + clear_bit(X86_FEATURE_PSE, boot_cpu_data.x86_capability); } else if (!memcmp(from+4, "exactmap", 8)) { from += 8+4; e820.nr_map = 0; @@ -907,7 +910,7 @@ * the bootmem allocator) but before get_smp_config (to allow parsing * of MADT). */ - acpi_table_init(*cmdline_p); + acpi_boot_init(*cmdline_p); #endif #ifdef CONFIG_X86_LOCAL_APIC /* @@ -1106,7 +1109,7 @@ /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ - clear_bit(0*32+31, &c->x86_capability); + clear_bit(0*32+31, c->x86_capability); r = get_model_name(c); @@ -1117,8 +1120,8 @@ { /* Based on AMD doc 20734R - June 2000 */ if ( c->x86_model == 0 ) { - clear_bit(X86_FEATURE_APIC, &c->x86_capability); - set_bit(X86_FEATURE_PGE, &c->x86_capability); + clear_bit(X86_FEATURE_APIC, c->x86_capability); + set_bit(X86_FEATURE_PGE, c->x86_capability); } break; } @@ -1198,7 +1201,7 @@ /* Set MTRR capability flag if appropriate */ if (c->x86_model == 13 || c->x86_model == 9 || (c->x86_model == 8 && c->x86_mask >= 8)) - set_bit(X86_FEATURE_K6_MTRR, &c->x86_capability); + set_bit(X86_FEATURE_K6_MTRR, c->x86_capability); break; } break; @@ -1211,12 +1214,12 @@ * here. */ if (c->x86_model == 6 || c->x86_model == 7) { - if (!test_bit(X86_FEATURE_XMM, &c->x86_capability)) { + if (!test_bit(X86_FEATURE_XMM, c->x86_capability)) { printk(KERN_INFO "Enabling disabled K7/SSE Support.\n"); rdmsr(MSR_K7_HWCR, l, h); l &= ~0x00008000; wrmsr(MSR_K7_HWCR, l, h); - set_bit(X86_FEATURE_XMM, &c->x86_capability); + set_bit(X86_FEATURE_XMM, c->x86_capability); } } break; @@ -1228,7 +1231,7 @@ } /* - * Read Cyrix DEVID registers (DIR) to get more detailed info. about the CPU + * Read NSC/Cyrix DEVID registers (DIR) to get more detailed info. about the CPU */ static void __init do_cyrix_devid(unsigned char *dir0, unsigned char *dir1) { @@ -1303,7 +1306,7 @@ static void __init check_cx686_slop(struct cpuinfo_x86 *c) { unsigned long flags; - + if (Cx86_dir0_msb == 3) { unsigned char ccr3, ccr5; @@ -1313,7 +1316,7 @@ ccr5 = getCx86(CX86_CCR5); if (ccr5 & 2) setCx86(CX86_CCR5, ccr5 & 0xfd); /* reset SLOP */ - setCx86(CX86_CCR3, ccr3); /* disable MAPEN */ + setCx86(CX86_CCR3, ccr3); /* disable MAPEN */ local_irq_restore(flags); if (ccr5 & 2) { /* possible wrong calibration done */ @@ -1324,6 +1327,7 @@ } } + static void __init init_cyrix(struct cpuinfo_x86 *c) { unsigned char dir0, dir0_msn, dir0_lsn, dir1 = 0; @@ -1332,12 +1336,12 @@ /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ - clear_bit(0*32+31, &c->x86_capability); + clear_bit(0*32+31, c->x86_capability); /* Cyrix used bit 24 in extended (AMD) CPUID for Cyrix MMX extensions */ - if ( test_bit(1*32+24, &c->x86_capability) ) { - clear_bit(1*32+24, &c->x86_capability); - set_bit(X86_FEATURE_CXMMX, &c->x86_capability); + if ( test_bit(1*32+24, c->x86_capability) ) { + clear_bit(1*32+24, c->x86_capability); + set_bit(X86_FEATURE_CXMMX, c->x86_capability); } do_cyrix_devid(&dir0, &dir1); @@ -1384,23 +1388,18 @@ } else /* 686 */ p = Cx86_cb+1; /* Emulate MTRRs using Cyrix's ARRs. */ - set_bit(X86_FEATURE_CYRIX_ARR, &c->x86_capability); + set_bit(X86_FEATURE_CYRIX_ARR, c->x86_capability); /* 6x86's contain this bug */ c->coma_bug = 1; break; case 4: /* MediaGX/GXm */ - /* - * Life sometimes gets weiiiiiiiird if we use this - * on the MediaGX. So we turn it off for now. - */ - #ifdef CONFIG_PCI - /* It isnt really a PCI quirk directly, but the cure is the + /* It isn't really a PCI quirk directly, but the cure is the same. The MediaGX has deep magic SMM stuff that handles the SB emulation. It thows away the fifo on disable_dma() which is wrong and ruins the audio. - + Bug2: VSA1 has a wrap bug so that using maximum sized DMA causes bad things. According to NatSemi VSA2 has another bug to do with 'hlt'. I've not seen any boards using VSA2 @@ -1415,15 +1414,26 @@ /* GXm supports extended cpuid levels 'ala' AMD */ if (c->cpuid_level == 2) { + /* Enable Natsemi MMX extensions */ + setCx86(CX86_CCR7, getCx86(CX86_CCR7) | 1); + get_model_name(c); /* get CPU marketing name */ - clear_bit(X86_FEATURE_TSC, c->x86_capability); + /* + * The 5510/5520 companion chips have a funky PIT + * that breaks the TSC synchronizing, so turn it off + */ + if(pci_find_device(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5510, NULL) || + pci_find_device(PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, NULL)) + clear_bit(X86_FEATURE_TSC, c->x86_capability); return; } else { /* MediaGX */ Cx86_cb[2] = (dir0_lsn & 1) ? '3' : '4'; p = Cx86_cb+2; c->x86_model = (dir1 & 0x20) ? 1 : 2; - clear_bit(X86_FEATURE_TSC, &c->x86_capability); +#ifndef CONFIG_CS5520 + clear_bit(X86_FEATURE_TSC, c->x86_capability); +#endif } break; @@ -1441,10 +1451,10 @@ tmp = (!(dir0_lsn & 7) || dir0_lsn & 1) ? 2 : 0; Cx86_cb[tmp] = cyrix_model_mult2[dir0_lsn & 7]; p = Cx86_cb+tmp; - if (((dir1 & 0x0f) > 4) || ((dir1 & 0xf0) == 0x20)) + if (((dir1 & 0x0f) > 4) || ((dir1 & 0xf0) == 0x20)) (c->x86_model)++; /* Emulate MTRRs using Cyrix's ARRs. */ - set_bit(X86_FEATURE_CYRIX_ARR, &c->x86_capability); + set_bit(X86_FEATURE_CYRIX_ARR, c->x86_capability); break; case 0xf: /* Cyrix 486 without DEVID registers */ @@ -1743,7 +1753,7 @@ /* Bit 31 in normal CPUID used for nonstandard 3DNow ID; 3DNow is IDd by bit 31 in extended CPUID (1*32+31) anyway */ - clear_bit(0*32+31, &c->x86_capability); + clear_bit(0*32+31, c->x86_capability); switch (c->x86) { @@ -1754,7 +1764,7 @@ fcr_set=ECX8|DSMC|EDCTLB|EMMX|ERETSTK; fcr_clr=DPDC; printk(KERN_NOTICE "Disabling bugged TSC.\n"); - clear_bit(X86_FEATURE_TSC, &c->x86_capability); + clear_bit(X86_FEATURE_TSC, c->x86_capability); #ifdef CONFIG_X86_OOSTORE winchip_create_optimal_mcr(); /* Enable @@ -1833,12 +1843,12 @@ printk(KERN_INFO "Centaur FCR is 0x%X\n",lo); } /* Emulate MTRRs using Centaur's MCR. */ - set_bit(X86_FEATURE_CENTAUR_MCR, &c->x86_capability); + set_bit(X86_FEATURE_CENTAUR_MCR, c->x86_capability); /* Report CX8 */ - set_bit(X86_FEATURE_CX8, &c->x86_capability); + set_bit(X86_FEATURE_CX8, c->x86_capability); /* Set 3DNow! on Winchip 2 and above. */ if (c->x86_model >=8) - set_bit(X86_FEATURE_3DNOW, &c->x86_capability); + set_bit(X86_FEATURE_3DNOW, c->x86_capability); /* See if we can find out some more. */ if ( cpuid_eax(0x80000000) >= 0x80000005 ) { /* Yes, we can. */ @@ -1856,8 +1866,8 @@ lo |= (1<<1 | 1<<7); /* Report CX8 & enable PGE */ wrmsr (MSR_VIA_FCR, lo, hi); - set_bit(X86_FEATURE_CX8, &c->x86_capability); - set_bit(X86_FEATURE_3DNOW, &c->x86_capability); + set_bit(X86_FEATURE_CX8, c->x86_capability); + set_bit(X86_FEATURE_3DNOW, c->x86_capability); get_model_name(c); display_cacheinfo(c); @@ -1951,7 +1961,7 @@ "movl $0x2333313a, %%edx\n\t" "cpuid\n\t" : : : "eax", "ebx", "ecx", "edx" ); - set_bit(X86_FEATURE_CX8, &c->x86_capability); + set_bit(X86_FEATURE_CX8, c->x86_capability); } @@ -2084,7 +2094,7 @@ } if ( l1i || l1d ) printk(KERN_INFO "CPU: L1 I cache: %dK, L1 D cache: %dK\n", - l1i, l1d); + l1i, l1d); if ( l2 ) printk(KERN_INFO "CPU: L2 cache: %dK\n", l2); if ( l3 ) @@ -2101,7 +2111,7 @@ /* SEP CPUID bug: Pentium Pro reports SEP but doesn't have it */ if ( c->x86 == 6 && c->x86_model < 3 && c->x86_mask < 3 ) - clear_bit(X86_FEATURE_SEP, &c->x86_capability); + clear_bit(X86_FEATURE_SEP, c->x86_capability); /* Names for the Pentium II/Celeron processors detectable only by also checking the cache size. @@ -2131,7 +2141,7 @@ strcpy(c->x86_model_id, p); #ifdef CONFIG_SMP - if (test_bit(X86_FEATURE_HT, &c->x86_capability)) { + if (test_bit(X86_FEATURE_HT, c->x86_capability)) { extern int phys_proc_id[NR_CPUS]; u32 eax, ebx, ecx, edx; @@ -2191,6 +2201,8 @@ c->x86_vendor = X86_VENDOR_AMD; else if (!strcmp(v, "CyrixInstead")) c->x86_vendor = X86_VENDOR_CYRIX; + else if (!strcmp(v, "Geode by NSC")) + c->x86_vendor = X86_VENDOR_NSC; else if (!strcmp(v, "UMC UMC UMC ")) c->x86_vendor = X86_VENDOR_UMC; else if (!strcmp(v, "CentaurHauls")) @@ -2298,7 +2310,7 @@ static void __init squash_the_stupid_serial_number(struct cpuinfo_x86 *c) { - if( test_bit(X86_FEATURE_PN, &c->x86_capability) && + if( test_bit(X86_FEATURE_PN, c->x86_capability) && disable_x86_serial_nr ) { /* Disable processor serial number */ unsigned long lo,hi; @@ -2306,7 +2318,7 @@ lo |= 0x200000; wrmsr(MSR_IA32_BBL_CR_CTL,lo,hi); printk(KERN_NOTICE "CPU serial number disabled.\n"); - clear_bit(X86_FEATURE_PN, &c->x86_capability); + clear_bit(X86_FEATURE_PN, c->x86_capability); /* Disabling the serial number may affect the cpuid level */ c->cpuid_level = cpuid_eax(0); @@ -2472,8 +2484,9 @@ /* Intel-defined flags: level 0x00000001 */ if ( c->cpuid_level >= 0x00000001 ) { - cpuid(0x00000001, &tfms, &junk, &junk, - &c->x86_capability[0]); + u32 capability; + cpuid(0x00000001, &tfms, &junk, &junk, &capability); + c->x86_capability[0] = capability; c->x86 = (tfms >> 8) & 15; c->x86_model = (tfms >> 4) & 15; c->x86_mask = tfms & 15; @@ -2499,7 +2512,7 @@ } } - printk(KERN_DEBUG "CPU: Before vendor init, caps: %08x %08x %08x, vendor = %d\n", + printk(KERN_DEBUG "CPU: Before vendor init, caps: %08lx %08lx %08lx, vendor = %d\n", c->x86_capability[0], c->x86_capability[1], c->x86_capability[2], @@ -2516,24 +2529,6 @@ * indicate the features this CPU genuinely supports! */ switch ( c->x86_vendor ) { - case X86_VENDOR_UNKNOWN: - default: - /* Not much we can do here... */ - /* Check if at least it has cpuid */ - if (c->cpuid_level == -1) - { - /* No cpuid. It must be an ancient CPU */ - if (c->x86 == 4) - strcpy(c->x86_model_id, "486"); - else if (c->x86 == 3) - strcpy(c->x86_model_id, "386"); - } - break; - - case X86_VENDOR_CYRIX: - init_cyrix(c); - break; - case X86_VENDOR_AMD: init_amd(c); break; @@ -2542,6 +2537,10 @@ init_centaur(c); break; + case X86_VENDOR_CYRIX: + init_cyrix(c); + break; + case X86_VENDOR_INTEL: init_intel(c); break; @@ -2550,16 +2549,35 @@ c->x86_cache_size = 256; /* A few had 1 MB... */ break; - case X86_VENDOR_TRANSMETA: - init_transmeta(c); + case X86_VENDOR_NSC: + init_cyrix(c); break; case X86_VENDOR_RISE: init_rise(c); break; + + case X86_VENDOR_TRANSMETA: + init_transmeta(c); + break; + + case X86_VENDOR_UNKNOWN: + default: + /* Not much we can do here... */ + /* Check if at least it has cpuid */ + if (c->cpuid_level == -1) + { + /* No cpuid. It must be an ancient CPU */ + if (c->x86 == 4) + strcpy(c->x86_model_id, "486"); + else if (c->x86 == 3) + strcpy(c->x86_model_id, "386"); + } + break; + } - printk(KERN_DEBUG "CPU: After vendor init, caps: %08x %08x %08x %08x\n", + printk(KERN_DEBUG "CPU: After vendor init, caps: %08lx %08lx %08lx %08lx\n", c->x86_capability[0], c->x86_capability[1], c->x86_capability[2], @@ -2573,13 +2591,13 @@ /* TSC disabled? */ #ifndef CONFIG_X86_TSC if ( tsc_disable ) - clear_bit(X86_FEATURE_TSC, &c->x86_capability); + clear_bit(X86_FEATURE_TSC, c->x86_capability); #endif /* FXSR disabled? */ if (disable_x86_fxsr) { - clear_bit(X86_FEATURE_FXSR, &c->x86_capability); - clear_bit(X86_FEATURE_XMM, &c->x86_capability); + clear_bit(X86_FEATURE_FXSR, c->x86_capability); + clear_bit(X86_FEATURE_XMM, c->x86_capability); } /* Disable the PN if appropriate */ @@ -2602,7 +2620,7 @@ /* Now the feature flags better reflect actual CPU features! */ - printk(KERN_DEBUG "CPU: After generic, caps: %08x %08x %08x %08x\n", + printk(KERN_DEBUG "CPU: After generic, caps: %08lx %08lx %08lx %08lx\n", c->x86_capability[0], c->x86_capability[1], c->x86_capability[2], @@ -2620,7 +2638,7 @@ boot_cpu_data.x86_capability[i] &= c->x86_capability[i]; } - printk(KERN_DEBUG "CPU: Common caps: %08x %08x %08x %08x\n", + printk(KERN_DEBUG "CPU: Common caps: %08lx %08lx %08lx %08lx\n", boot_cpu_data.x86_capability[0], boot_cpu_data.x86_capability[1], boot_cpu_data.x86_capability[2], @@ -2634,14 +2652,15 @@ { get_cpu_vendor(&boot_cpu_data); - if ( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) + if (( boot_cpu_data.x86_vendor == X86_VENDOR_CYRIX ) || + ( boot_cpu_data.x86_vendor == X86_VENDOR_NSC )) init_cyrix(&boot_cpu_data); } /* These need to match <asm/processor.h> */ static char *cpu_vendor_names[] __initdata = { - "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta" }; + "Intel", "Cyrix", "AMD", "UMC", "NexGen", "Centaur", "Rise", "Transmeta", "NSC" }; void __init print_cpu_info(struct cpuinfo_x86 *c) @@ -2682,10 +2701,10 @@ */ static char *x86_cap_flags[] = { /* Intel-defined */ - "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", - "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov", - "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx", - "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", NULL, + "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce", + "cx8", "apic", NULL, "sep", "mtrr", "pge", "mca", "cmov", + "pat", "pse36", "pn", "clflush", NULL, "dts", "acpi", "mmx", + "fxsr", "sse", "sse2", "ss", "ht", "tm", "ia64", NULL, /* AMD-defined */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, @@ -2729,7 +2748,7 @@ else seq_printf(m, "stepping\t: unknown\n"); - if ( test_bit(X86_FEATURE_TSC, &c->x86_capability) ) { + if ( test_bit(X86_FEATURE_TSC, c->x86_capability) ) { seq_printf(m, "cpu MHz\t\t: %lu.%03lu\n", cpu_khz / 1000, (cpu_khz % 1000)); } @@ -2759,7 +2778,7 @@ c->wp_works_ok ? "yes" : "no"); for ( i = 0 ; i < 32*NCAPINTS ; i++ ) - if ( test_bit(i, &c->x86_capability) && + if ( test_bit(i, c->x86_capability) && x86_cap_flags[i] != NULL ) seq_printf(m, " %s", x86_cap_flags[i]); |
From: James S. <jsi...@us...> - 2002-04-16 19:32:15
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc/kernel In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/ppc/kernel Modified Files: ppc_ksyms.c Log Message: Synced to 2.5.8. Index: ppc_ksyms.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc/kernel/ppc_ksyms.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- ppc_ksyms.c 18 Mar 2002 19:29:09 -0000 1.6 +++ ppc_ksyms.c 16 Apr 2002 17:41:48 -0000 1.7 @@ -78,6 +78,10 @@ extern unsigned long ret_to_user_hook; extern unsigned long mm_ptov (unsigned long paddr); +extern void *consistent_alloc(int gfp, size_t size, dma_addr_t *dma_handle); +extern void consistent_free(void *vaddr); +extern void consistent_sync(void *vaddr, size_t size, int direction); + EXPORT_SYMBOL(clear_page); EXPORT_SYMBOL(do_signal); EXPORT_SYMBOL(do_syscall_trace); @@ -122,7 +126,6 @@ EXPORT_SYMBOL(strchr); EXPORT_SYMBOL(strrchr); EXPORT_SYMBOL(strpbrk); -EXPORT_SYMBOL(strtok); EXPORT_SYMBOL(strstr); EXPORT_SYMBOL(strlen); EXPORT_SYMBOL(strnlen); |
From: James S. <jsi...@us...> - 2002-04-16 19:32:12
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/char In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/drivers/char Modified Files: mem.c n_tty.c tty_io.c Log Message: Synced to 2.5.8. Index: mem.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/mem.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- mem.c 18 Mar 2002 19:29:10 -0000 1.21 +++ mem.c 16 Apr 2002 17:41:49 -0000 1.22 @@ -167,10 +167,10 @@ * caching for the high addresses through the KEN pin, but * we maintain the tradition of paranoia in this code. */ - return !( test_bit(X86_FEATURE_MTRR, &boot_cpu_data.x86_capability) || - test_bit(X86_FEATURE_K6_MTRR, &boot_cpu_data.x86_capability) || - test_bit(X86_FEATURE_CYRIX_ARR, &boot_cpu_data.x86_capability) || - test_bit(X86_FEATURE_CENTAUR_MCR, &boot_cpu_data.x86_capability) ) + return !( test_bit(X86_FEATURE_MTRR, boot_cpu_data.x86_capability) || + test_bit(X86_FEATURE_K6_MTRR, boot_cpu_data.x86_capability) || + test_bit(X86_FEATURE_CYRIX_ARR, boot_cpu_data.x86_capability) || + test_bit(X86_FEATURE_CENTAUR_MCR, boot_cpu_data.x86_capability) ) && addr >= __pa(high_memory); #else return addr >= __pa(high_memory); Index: n_tty.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/n_tty.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- n_tty.c 20 Jan 2002 03:54:46 -0000 1.6 +++ n_tty.c 16 Apr 2002 17:41:49 -0000 1.7 @@ -537,7 +537,7 @@ * handle specially, do shortcut processing to speed things * up. */ - if (!test_bit(c, &tty->process_char_map) || tty->lnext) { + if (!test_bit(c, tty->process_char_map) || tty->lnext) { finish_erasing(tty); tty->lnext = 0; if (L_ECHO(tty)) { @@ -658,7 +658,7 @@ handle_newline: spin_lock_irqsave(&tty->read_lock, flags); - set_bit(tty->read_head, &tty->read_flags); + set_bit(tty->read_head, tty->read_flags); put_tty_queue_nolock(c, tty); tty->canon_head = tty->read_head; tty->canon_data++; @@ -810,38 +810,38 @@ memset(tty->process_char_map, 0, 256/8); if (I_IGNCR(tty) || I_ICRNL(tty)) - set_bit('\r', &tty->process_char_map); + set_bit('\r', tty->process_char_map); if (I_INLCR(tty)) - set_bit('\n', &tty->process_char_map); + set_bit('\n', tty->process_char_map); if (L_ICANON(tty)) { - set_bit(ERASE_CHAR(tty), &tty->process_char_map); - set_bit(KILL_CHAR(tty), &tty->process_char_map); - set_bit(EOF_CHAR(tty), &tty->process_char_map); - set_bit('\n', &tty->process_char_map); - set_bit(EOL_CHAR(tty), &tty->process_char_map); + set_bit(ERASE_CHAR(tty), tty->process_char_map); + set_bit(KILL_CHAR(tty), tty->process_char_map); + set_bit(EOF_CHAR(tty), tty->process_char_map); + set_bit('\n', tty->process_char_map); + set_bit(EOL_CHAR(tty), tty->process_char_map); if (L_IEXTEN(tty)) { set_bit(WERASE_CHAR(tty), - &tty->process_char_map); + tty->process_char_map); set_bit(LNEXT_CHAR(tty), - &tty->process_char_map); + tty->process_char_map); set_bit(EOL2_CHAR(tty), - &tty->process_char_map); + tty->process_char_map); if (L_ECHO(tty)) set_bit(REPRINT_CHAR(tty), - &tty->process_char_map); + tty->process_char_map); } } if (I_IXON(tty)) { - set_bit(START_CHAR(tty), &tty->process_char_map); - set_bit(STOP_CHAR(tty), &tty->process_char_map); + set_bit(START_CHAR(tty), tty->process_char_map); + set_bit(STOP_CHAR(tty), tty->process_char_map); } if (L_ISIG(tty)) { - set_bit(INTR_CHAR(tty), &tty->process_char_map); - set_bit(QUIT_CHAR(tty), &tty->process_char_map); - set_bit(SUSP_CHAR(tty), &tty->process_char_map); + set_bit(INTR_CHAR(tty), tty->process_char_map); + set_bit(QUIT_CHAR(tty), tty->process_char_map); + set_bit(SUSP_CHAR(tty), tty->process_char_map); } - clear_bit(__DISABLED_CHAR, &tty->process_char_map); + clear_bit(__DISABLED_CHAR, tty->process_char_map); sti(); tty->raw = 0; tty->real_raw = 0; @@ -1056,7 +1056,7 @@ int eol; eol = test_and_clear_bit(tty->read_tail, - &tty->read_flags); + tty->read_flags); c = tty->read_buf[tty->read_tail]; spin_lock_irqsave(&tty->read_lock, flags); tty->read_tail = ((tty->read_tail+1) & Index: tty_io.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/tty_io.c,v retrieving revision 1.46 retrieving revision 1.47 diff -u -d -r1.46 -r1.47 --- tty_io.c 25 Mar 2002 20:14:45 -0000 1.46 +++ tty_io.c 16 Apr 2002 17:41:49 -0000 1.47 @@ -566,6 +566,8 @@ struct task_struct *p; int tty_pgrp = -1; + lock_kernel(); + if (tty) { tty_pgrp = tty->pgrp; if (on_exit && tty->driver.type != TTY_DRIVER_TYPE_PTY) @@ -575,6 +577,7 @@ kill_pg(current->tty_old_pgrp, SIGHUP, on_exit); kill_pg(current->tty_old_pgrp, SIGCONT, on_exit); } + unlock_kernel(); return; } if (tty_pgrp > 0) { @@ -592,6 +595,7 @@ if (p->session == current->session) p->tty = NULL; read_unlock(&tasklist_lock); + unlock_kernel(); } void stop_tty(struct tty_struct *tty) |
From: James S. <jsi...@us...> - 2002-04-16 19:32:06
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64/xmon In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/ppc64/xmon Modified Files: start.c Log Message: Synced to 2.5.8. Index: start.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc64/xmon/start.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- start.c 15 Mar 2002 18:28:12 -0000 1.1 +++ start.c 16 Apr 2002 17:41:49 -0000 1.2 @@ -7,12 +7,11 @@ * 2 of the License, or (at your option) any later version. */ #include <linux/string.h> +#include <linux/kernel.h> +#include <linux/sysrq.h> #include <asm/machdep.h> #include <asm/io.h> #include <asm/page.h> -#include <linux/pmu.h> -#include <linux/kernel.h> -#include <linux/sysrq.h> #include <asm/prom.h> #include <asm/processor.h> |
From: James S. <jsi...@us...> - 2002-04-16 19:32:03
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/sparc64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/sparc64/kernel Modified Files: ioctl32.c Log Message: Synced to 2.5.8. Index: ioctl32.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/sparc64/kernel/ioctl32.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ioctl32.c 22 Mar 2002 20:13:58 -0000 1.2 +++ ioctl32.c 16 Apr 2002 17:41:49 -0000 1.3 @@ -1062,7 +1062,7 @@ break; default: do { - static int count = 0; + static int count; if (++count <= 20) printk("%s: Unknown fb ioctl cmd fd(%d) " "cmd(%08x) arg(%08lx)\n", @@ -1716,7 +1716,7 @@ break; default: do { - static int count = 0; + static int count; if (++count <= 20) printk("ppp_ioctl: Unknown cmd fd(%d) " "cmd(%08x) arg(%08x)\n", @@ -1826,7 +1826,7 @@ break; default: do { - static int count = 0; + static int count; if (++count <= 20) printk("mt_ioctl: Unknown cmd fd(%d) " "cmd(%08x) arg(%08x)\n", @@ -1944,7 +1944,7 @@ break; default: do { - static int count = 0; + static int count; if (++count <= 20) printk("cdrom_ioctl: Unknown cmd fd(%d) " "cmd(%08x) arg(%08x)\n", @@ -2031,7 +2031,7 @@ } break; default: { - static int count = 0; + static int count; if (++count <= 20) printk("%s: Unknown loop ioctl cmd, fd(%d) " "cmd(%08x) arg(%08lx)\n", @@ -4891,7 +4891,7 @@ handler = (void *)(long)t->handler; error = handler(fd, cmd, arg, filp); } else { - static int count = 0; + static int count; if (++count <= 20) printk("sys32_ioctl(%s:%d): Unknown cmd fd(%d) " "cmd(%08x) arg(%08x)\n", |
From: James S. <jsi...@us...> - 2002-04-16 19:32:03
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc/platforms In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/ppc/platforms Modified Files: chrp_setup.c Log Message: Synced to 2.5.8. Index: chrp_setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc/platforms/chrp_setup.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- chrp_setup.c 14 Mar 2002 22:32:22 -0000 1.1 +++ chrp_setup.c 16 Apr 2002 17:41:48 -0000 1.2 @@ -545,7 +545,7 @@ * Print the banner, then scroll down so boot progress * can be printed. -- Cort */ - if ( ppc_md.progress ) ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0x0); + if (ppc_md.progress) ppc_md.progress("Linux/PPC "UTS_RELEASE"\n", 0x0); } void __chrp |
From: James S. <jsi...@us...> - 2002-04-16 19:32:02
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64/kernel In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/ppc64/kernel Modified Files: chrp_setup.c iSeries_setup.c ioctl32.c setup.c Log Message: Synced to 2.5.8. Index: chrp_setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc64/kernel/chrp_setup.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- chrp_setup.c 15 Mar 2002 18:28:12 -0000 1.1 +++ chrp_setup.c 16 Apr 2002 17:41:49 -0000 1.2 @@ -319,12 +319,15 @@ extern void setup_default_decr(void); +extern unsigned long ppc_proc_freq; +extern unsigned long ppc_tb_freq; + void __init pSeries_calibrate_decr(void) { struct device_node *cpu; struct div_result divres; int *fp; - unsigned long freq; + unsigned long freq, processor_freq; /* * The cpu node should have a timebase-frequency property @@ -337,8 +340,19 @@ if (fp != 0) freq = *fp; } + ppc_tb_freq = freq; + processor_freq = freq; + if (cpu != 0) { + fp = (int *) get_property(cpu, "clock-frequency", NULL); + if (fp != 0) + processor_freq = *fp; + } + ppc_proc_freq = processor_freq; + printk("time_init: decrementer frequency = %lu.%.6lu MHz\n", freq/1000000, freq%1000000 ); + printk("time_init: processor frequency = %lu.%.6lu MHz\n", + processor_freq/1000000, processor_freq%1000000 ); tb_ticks_per_jiffy = freq / HZ; tb_ticks_per_sec = tb_ticks_per_jiffy * HZ; Index: iSeries_setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc64/kernel/iSeries_setup.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- iSeries_setup.c 15 Mar 2002 18:28:12 -0000 1.1 +++ iSeries_setup.c 16 Apr 2002 17:41:49 -0000 1.2 @@ -26,6 +26,7 @@ #include <linux/string.h> #include <linux/bootmem.h> #include <linux/blk.h> +#include <linux/seq_file.h> #include <asm/processor.h> #include <asm/machdep.h> @@ -576,6 +577,7 @@ lmb_init(); lmb_add( 0, naca->physicalMemorySize ); + lmb_analyze(); /* ?? */ lmb_reserve( 0, __pa(klimit)); /* @@ -592,8 +594,10 @@ static void __init setup_iSeries_cache_sizes(void) { unsigned i,n; - naca->iCacheL1LineSize = xIoHriProcessorVpd[0].xInstCacheOperandSize; - naca->dCacheL1LineSize = xIoHriProcessorVpd[0].xDataCacheOperandSize; + unsigned procIx = get_paca()->xLpPaca.xDynHvPhysicalProcIndex; + + naca->iCacheL1LineSize = xIoHriProcessorVpd[procIx].xInstCacheOperandSize; + naca->dCacheL1LineSize = xIoHriProcessorVpd[procIx].xDataCacheOperandSize; naca->iCacheL1LinesPerPage = PAGE_SIZE / naca->iCacheL1LineSize; naca->dCacheL1LinesPerPage = PAGE_SIZE / naca->dCacheL1LineSize; i = naca->iCacheL1LineSize; @@ -641,6 +645,9 @@ } #endif /* CONFIG_PPC_ISERIES */ +extern unsigned long ppc_proc_freq; +extern unsigned long ppc_tb_freq; + /* * Document me. */ @@ -648,7 +655,8 @@ iSeries_setup_arch(void) { void * eventStack; - + unsigned procIx = get_paca()->xLpPaca.xDynHvPhysicalProcIndex; + /* Setup the Lp Event Queue */ /* Allocate a page for the Event Stack @@ -674,15 +682,19 @@ xItLpQueue.xIndex = 0; /* Compute processor frequency */ - procFreqHz = (((1UL<<34) * 1000000) / xIoHriProcessorVpd[0].xProcFreq ); + procFreqHz = (((1UL<<34) * 1000000) / xIoHriProcessorVpd[procIx].xProcFreq ); procFreqMhz = procFreqHz / 1000000; procFreqMhzHundreths = (procFreqHz/10000) - (procFreqMhz*100); + ppc_proc_freq = procFreqHz; + /* Compute time base frequency */ - tbFreqHz = (((1UL<<32) * 1000000) / xIoHriProcessorVpd[0].xTimeBaseFreq ); + tbFreqHz = (((1UL<<32) * 1000000) / xIoHriProcessorVpd[procIx].xTimeBaseFreq ); tbFreqMhz = tbFreqHz / 1000000; tbFreqMhzHundreths = (tbFreqHz/10000) - (tbFreqMhz*100); + ppc_tb_freq = tbFreqHz; + printk("Max logical processors = %d\n", itVpdAreas.xSlicMaxLogicalProcs ); printk("Max physical processors = %d\n", @@ -694,12 +706,12 @@ tbFreqMhz, tbFreqMhzHundreths ); printk("Processor version = %x\n", - xIoHriProcessorVpd[0].xPVR ); + xIoHriProcessorVpd[procIx].xPVR ); } /* - * int iSeries_setup_residual() + * int as400_setup_residual() * * Description: * This routine pretty-prints CPU information gathered from the VPD @@ -715,20 +727,25 @@ * The number of bytes copied into 'buffer' if OK, otherwise zero or less * on error. */ -void -iSeries_setup_residual(struct seq_file *m, unsigned long cpu_id) +void iSeries_setup_residual(struct seq_file *m) { - seq_printf(m, "clock\t\t: %lu.%02luMhz\n", procFreqMhz, - procFreqMhzHundreths); - seq_printf(m, "time base\t: %lu.%02luMHz\n", tbFreqMhz, - tbFreqMhzHundreths); - seq_printf(m, "i-cache\t\t: %d\n", naca->iCacheL1LineSize); - seq_printf(m, "d-cache\t\t: %d\n", naca->dCacheL1LineSize); + + seq_printf(m,"clock\t\t: %lu.%02luMhz\n", + procFreqMhz, procFreqMhzHundreths ); + seq_printf(m,"time base\t: %lu.%02luMHz\n", + tbFreqMhz, tbFreqMhzHundreths ); + seq_printf(m,"i-cache\t\t: %d\n", + naca->iCacheL1LineSize); + seq_printf(m,"d-cache\t\t: %d\n", + naca->dCacheL1LineSize); + } void iSeries_get_cpuinfo(struct seq_file *m) { - seq_printf(m, "machine\t\t: 64-bit iSeries Logical Partition\n"); + + seq_printf(m,"machine\t\t: 64-bit iSeries Logical Partition\n"); + } /* @@ -794,29 +811,29 @@ void __init iSeries_calibrate_decr(void) { - unsigned long freq; unsigned long cyclesPerUsec; - unsigned long tbf; struct div_result divres; /* Compute decrementer (and TB) frequency * in cycles/sec */ - - tbf = xIoHriProcessorVpd[0].xTimeBaseFreq; - - freq = 0x0100000000; - freq *= 1000000; /* 2^32 * 10^6 */ - freq = freq / tbf; /* cycles / sec */ - cyclesPerUsec = freq / 1000000; /* cycles / usec */ + + cyclesPerUsec = ppc_tb_freq / 1000000; /* cycles / usec */ /* Set the amount to refresh the decrementer by. This * is the number of decrementer ticks it takes for * 1/HZ seconds. */ - tb_ticks_per_jiffy = freq / HZ; + tb_ticks_per_jiffy = ppc_tb_freq / HZ; + +#if 0 + /* TEST CODE FOR ADJTIME */ + tb_ticks_per_jiffy += tb_ticks_per_jiffy / 5000; + /* END OF TEST CODE */ +#endif + /* * tb_ticks_per_sec = freq; would give better accuracy * but tb_ticks_per_sec = tb_ticks_per_jiffy*HZ; assures @@ -825,7 +842,7 @@ */ tb_ticks_per_sec = tb_ticks_per_jiffy * HZ; tb_ticks_per_usec = cyclesPerUsec; - tb_to_us = mulhwu_scale_factor(freq, 1000000); + tb_to_us = mulhwu_scale_factor(ppc_tb_freq, 1000000); div128_by_32( 1024*1024, 0, tb_ticks_per_sec, &divres ); tb_to_xs = divres.result_low; setup_default_decr(); Index: ioctl32.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc64/kernel/ioctl32.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- ioctl32.c 22 Mar 2002 20:13:58 -0000 1.2 +++ ioctl32.c 16 Apr 2002 17:41:49 -0000 1.3 @@ -3744,8 +3744,6 @@ COMPATIBLE_IOCTL(BLKROGET), COMPATIBLE_IOCTL(BLKRRPART), COMPATIBLE_IOCTL(BLKFLSBUF), -COMPATIBLE_IOCTL(BLKRASET), -COMPATIBLE_IOCTL(BLKFRASET), COMPATIBLE_IOCTL(BLKSECTSET), COMPATIBLE_IOCTL(BLKSSZGET), COMPATIBLE_IOCTL(BLKBSZGET), @@ -4318,10 +4316,8 @@ HANDLE_IOCTL(SIOCRTMSG, ret_einval), HANDLE_IOCTL(SIOCGSTAMP, do_siocgstamp), HANDLE_IOCTL(HDIO_GETGEO, hdio_getgeo), -HANDLE_IOCTL(BLKRAGET, w_long), HANDLE_IOCTL(BLKGETSIZE, w_long), HANDLE_IOCTL(0x1260, broken_blkgetsize), -HANDLE_IOCTL(BLKFRAGET, w_long), HANDLE_IOCTL(BLKSECTGET, w_long), HANDLE_IOCTL(BLKPG, blkpg_ioctl_trans), HANDLE_IOCTL(HDIO_GET_KEEPSETTINGS, hdio_ioctl_trans), Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc64/kernel/setup.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- setup.c 15 Mar 2002 18:59:28 -0000 1.1 +++ setup.c 16 Apr 2002 17:41:49 -0000 1.2 @@ -276,6 +276,9 @@ ppc_md.halt(); } +unsigned long ppc_proc_freq; +unsigned long ppc_tb_freq; + static int show_cpuinfo(struct seq_file *m, void *v) { unsigned long cpu_id = (unsigned long)v - 1; @@ -285,10 +288,6 @@ #ifdef CONFIG_SMP if (cpu_id == NR_CPUS) { - unsigned long bogosum = smp_num_cpus * loops_per_jiffy; - seq_printf(m, "total bogomips\t: %lu.%02lu\n", - bogosum/(500000/HZ), - bogosum/(5000/HZ) % 100); if (ppc_md.get_cpuinfo != NULL) ppc_md.get_cpuinfo(m); @@ -356,10 +355,6 @@ seq_printf(m, "revision\t: %hd.%hd\n", maj, min); - seq_printf(m, "bogomips\t: %lu.%02lu\n\n", - loops_per_jiffy/(500000/HZ), - loops_per_jiffy/(5000/HZ) % 100); - return 0; } |
From: James S. <jsi...@us...> - 2002-04-16 19:32:02
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/ppc64 In directory usw-pr-cvs1:/tmp/cvs-serv13887/linux/arch/ppc64 Modified Files: config.in Log Message: Synced to 2.5.8. Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/ppc64/config.in,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- config.in 22 Mar 2002 20:13:57 -0000 1.2 +++ config.in 16 Apr 2002 17:41:48 -0000 1.3 @@ -144,6 +144,8 @@ source drivers/video/Config.in +source drivers/input/Config.in + if [ "$CONFIG_PPC_ISERIES" = "y" ]; then mainmenu_option next_comment comment 'iSeries device drivers' @@ -183,7 +185,6 @@ define_bool CONFIG_CD_NO_IDESCSI y fi -source drivers/input/Config.in source drivers/char/Config.in source fs/Config.in |
From: James S. <jsi...@us...> - 2002-04-16 19:31:53
|
Update of /cvsroot/linuxconsole/ruby In directory usw-pr-cvs1:/tmp/cvs-serv13887 Added Files: AGAINST-2.5.8 Removed Files: AGAINST-2.5.7 Log Message: Synced to 2.5.8. --- NEW FILE: AGAINST-2.5.8 --- --- AGAINST-2.5.7 DELETED --- |