Rocketport changes for 2.5.70-bk
Subsystems (2)
PATCH 1/1 Rocketport changes for 2.5.70-bk
Here is a changeset for the rocketport driver against the latest 2.5.70 bk tree. It does the following:
- Removed non-GPL license text from headers - Removed check_region()/request_region() raciness - Made the driver a >2.5 driver only
Please pull from:
bk://kernel.bkbits.net/gregkh/linux/tty-2.5
thanks,
greg k-h
-----
[email protected], 2003-06-13 12:36:16-07:00, [email protected]
[PATCH] Rocket patch against 2.5.70-bk18
Here is rocket driver patch against 2.5.70-bk18. Changes are:
- Removed non-GPL license text from headers - Removed check_region()/request_region() raciness - Made the driver a >2.5 driver only (as you had suggested)
drivers/char/rocket.c | 287 +++++----------------------------------------- drivers/char/rocket.h | 24 --- drivers/char/rocket_int.h | 46 ------- drivers/pci/pci.ids | 2 include/linux/pci_ids.h | 2 5 files changed, 44 insertions(+), 317 deletions(-)
------
PATCH 1/1 Rocketport changes for 2.5.70-bk
ChangeSet 1.1308, 2003/06/13 12:36:16-07:00, [email protected]
[PATCH] Rocket patch against 2.5.70-bk18
Here is rocket driver patch against 2.5.70-bk18. Changes are:
- Removed non-GPL license text from headers - Removed check_region()/request_region() raciness - Made the driver a >2.5 driver only (as you had suggested)
drivers/char/rocket.c | 287 +++++----------------------------------------- drivers/char/rocket.h | 24 --- drivers/char/rocket_int.h | 46 ------- drivers/pci/pci.ids | 2 include/linux/pci_ids.h | 2 5 files changed, 44 insertions(+), 317 deletions(-)
drivers/char/rocket.c +36 -251
@@ -40,23 +40,12 @@*/ /****** Defines ******/ -#include <linux/config.h> -#include <linux/version.h> -#ifdef PCI_NUM_RESOURCES #define PCI_BASE_ADDRESS (dev, r) ((dev)->resource[r].start)#else #define PCI_BASE_ADDRESS (dev, r) ((dev)->base_address[r])#endif -#ifndef VERSION_CODE -# define VERSION_CODE (vers,rel,seq) ( ((vers)<<16) | ((rel)<<8) | (seq) ) -#endif - -#if LINUX_VERSION_CODE <VERSION_CODE (2 ,2 ,9 )/* No version < 2.2 */ -# error "This kernel is too old: not supported by this file" -#endif -#define ROCKET_PARANOIA_CHECK #define ROCKET_DISABLE_SIMUSAGE
@@ -72,45 +61,12 @@#undef REV_PCI_ORDER#undef ROCKET_DEBUG_IO -/* CAUTION!!!!! The TIME_STAT Function relies on the Pentium 64 bit -* register. For various reasons related to 1.2.13, the test for this -* register is omitted from this driver. If you are going to enable -* this option, make sure you are running a Pentium CPU and that a -* cat of /proc/cpuinfo shows ability TS Counters as Yes. Warning part -* done, don't cry to me if you enable this options and things won't -* work. If it gives you any problems, then disable the option. The code -* in this function is pretty straight forward, if it breaks on your -* CPU, there is probably something funny about your CPU. -*/ - -#undef TIME_STAT/* For performing timing statistics on driver. */ -/* Produces printks, one every TIME_COUNTER loops, eats */ -/* some of your CPU time. Good for testing or */ -/* other checking, otherwise, leave it undefed */ -/* Doug Ledford */ -#define TIME_STAT_CPU 100/* This needs to be set to your processor speed */ -/* For example, 100Mhz CPU, set this to 100 */ -#define TIME_COUNTER 180000/* This is how many iterations to run before */ -/* performing the printk statements. */ -/* 6000 = 1 minute, 360000 = 1 hour, etc. */ -/* Since time_stat is long long, this */ -/* Can be really high if you want :) */ -#undef TIME_STAT_VERBOSE/* Undef this if you want a terse log message. */ - -#if LINUX_VERSION_CODE <VERSION_CODE (2 ,4 ,0 ) -#define TTY_DRIVER_NO_DEVFS 0 -#endif -#define POLL_PERIOD HZ/100/* Polling period .01 seconds (10ms) */ /****** Kernel includes ******/ #ifdef MODVERSIONS -#if LINUX_VERSION_CODE <VERSION_CODE (2 ,5 ,00 ) -#include <linux/modversions.h> -#else #include <config/modversions.h> -#endif #endif #include <linux/module.h>
@@ -118,13 +74,7 @@#include <linux/major.h> #include <linux/kernel.h> #include <linux/signal.h> - -#if LINUX_VERSION_CODE <VERSION_CODE (2 ,4 ,0 ) -#include <linux/malloc.h> -#else #include <linux/slab.h> -#endif -#include <linux/mm.h> #include <linux/sched.h> #include <linux/timer.h>
@@ -153,20 +103,8 @@#include "rocket_int.h" #include "rocket.h" -#ifdef LOCAL_ROCKET_H -#include "version.h" -#else -#define ROCKET_VERSION "2.08" -#define ROCKET_DATE "02-June-2003" -#endif /* LOCAL_ROCKET_H */ - -/* -* All of the compatibilty code so we can compile serial.c against -* older kernels is hidden in rocket_compat.h -*/ -#if defined(LOCAL_ROCKET_H ) || (LINUX_VERSION_CODE <VERSION_CODE (2 ,3 ,23 )) -#include "rocket_compat.h" -#endif +#define ROCKET_VERSION "2.09" +#define ROCKET_DATE "12-June-2003"/****** RocketPort Local Variables ******/
@@ -205,13 +143,6 @@static rocketModel_t rocketModel[NUM_BOARDS ];static int max_board; -#ifdef TIME_STAT -static unsigned long long time_stat; -static unsigned long time_stat_short; -static unsigned long time_stat_long; -static unsigned long time_counter; -#endif -/* * The following arrays define the interrupt bits corresponding to each AIOP. * These bits are different between the ISA and regular PCI boards and the
@@ -241,7 +172,7 @@static unsigned long nextLineNumber;/***** RocketPort Static Prototypes *********/ -static int __init init_ISA (int i,int *reserved_controller); +static int __init init_ISA (int i);static void rp_wait_until_sent (struct tty_struct *tty,int timeout);static void rp_flush_buffer (struct tty_struct *tty);static void rmSpeakerReset (CONTROLLER_T * CtlP,unsigned long model);
@@ -564,16 +495,6 @@unsigned char AiopMask;Word_t bit; -#ifdef TIME_STAT -unsigned long low =0 , high =0 , loop_time; -unsigned long long time_stat_tmp =0 , time_stat_tmp2 =0 ; - - __asm__(".byte 0x0f,0x31" :"=a" (low),"=d" (high)); - time_stat_tmp = high; - time_stat_tmp <<=32 ; - time_stat_tmp += low; -#endif /* TIME_STAT */ -/* Walk through all the boards (ctrl's) */ for (ctrl =0 ; ctrl < max_board; ctrl++) {if (rcktpt_io_addr[ctrl] <=0 )
@@ -635,48 +556,6 @@*/ if (atomic_read (&rp_num_ports_open))mod_timer (&rocket_timer, jiffies +POLL_PERIOD ); - -#ifdef TIME_STAT - __asm__(".byte 0x0f,0x31" :"=a" (low),"=d" (high)); - time_stat_tmp2 = high; - time_stat_tmp2 <<=32 ; - time_stat_tmp2 += low; - time_stat_tmp2 -= time_stat_tmp; - time_stat += time_stat_tmp2; -if (time_counter ==0 ) - time_stat_short = time_stat_long = time_stat_tmp2; -else { -if (time_stat_tmp2 < time_stat_short) - time_stat_short = time_stat_tmp2; -else if (time_stat_tmp2 > time_stat_long) - time_stat_long = time_stat_tmp2; - } -if (++time_counter ==TIME_COUNTER ) { - loop_time = - (unsigned -long ) (((unsigned long ) (time_stat >>32 ) * - ((unsigned long ) (0xffffffff ) / - (TIME_STAT_CPU *TIME_COUNTER ))) + - ((unsigned long ) time_stat / - (TIME_STAT_CPU *TIME_COUNTER ))); -#ifdef TIME_STAT_VERBOSE -printk (KERN_INFO "rp_do_poll: Interrupt Timings\n" ); -printk (KERN_INFO " %5ld iterations; %ld us min,\n" , - (long )TIME_COUNTER , - (time_stat_short /TIME_STAT_CPU )); -printk (KERN_INFO " %5ld us max, %ld us average per iteration.\n" , - (time_stat_long /TIME_STAT_CPU ), loop_time); -printk (KERN_INFO "We want to use < 5,000 us for an iteration.\n" ); -#else /* TIME_STAT_VERBOSE */ -printk (KERN_INFO "rp: %ld loops: %ld min, %ld max, %ld us/loop.\n" , - (long )TIME_COUNTER , - (time_stat_short /TIME_STAT_CPU ), - (time_stat_long /TIME_STAT_CPU ), loop_time); -#endif /* TIME_STAT_VERBOSE */ - time_counter = time_stat =0 ; - time_stat_short = time_stat_long =0 ; - } -#endif /* TIME_STAT */ }/*
@@ -762,10 +641,8 @@spin_lock_init (&info->slock);sema_init (&info->write_sem,1 ); rp_table[line] = info; -#if LINUX_VERSION_CODE >VERSION_CODE (2 ,5 ,0 )if (pci_dev)tty_register_device (rocket_driver, line, &pci_dev->dev); -#endif }/*
@@ -1039,12 +916,7 @@CHANNEL_t *cp;unsigned long page; -#if LINUX_VERSION_CODE >VERSION_CODE (2 ,5 ,0 ) line =TTY_GET_LINE (tty); -#else - line =MINOR (tty->device) -TTY_DRIVER_MINOR_START (tty); -#endif -if ((line <0 ) || (line >=MAX_RP_PORTS ) || ((info = rp_table[line]) ==NULL ))return -ENXIO ;
@@ -1070,9 +942,6 @@ info->tty = tty;if (info->count++ ==0 ) { -#if ((LINUX_VERSION_CODE <VERSION_CODE (2 ,5 ,0 )) && defined(MODULE )) -MOD_INC_USE_COUNT ; -#endif atomic_inc (&rp_num_ports_open);#ifdef ROCKET_DEBUG_OPEN
@@ -1254,10 +1123,6 @@ info->flags &= ~(ROCKET_INITIALIZED |ROCKET_CLOSING |ROCKET_NORMAL_ACTIVE ); tty->closing =0 ;wake_up_interruptible (&info->close_wait); - -#if ((LINUX_VERSION_CODE <VERSION_CODE (2 ,5 ,0 )) && defined(MODULE )) -MOD_DEC_USE_COUNT ; -#endif atomic_dec (&rp_num_ports_open);#ifdef ROCKET_DEBUG_OPEN
@@ -1406,8 +1271,6 @@return 0 ; } -#if LINUX_VERSION_CODE >VERSION_CODE (2 ,5 ,0 ) -/* * Returns the state of the serial modem control lines. These next 2 functions * are the way kernel versions > 2.5 handle modem control lines rather than IOCTLs.
@@ -1450,8 +1313,6 @@return 0 ; } -#endif /* Linux > 2.5 */ -static int get_config (struct r_port *info,struct rocket_config *retinfo) {struct rocket_config tmp;
@@ -1781,12 +1642,8 @@rp_flush_buffer (tty);if (info->flags &ROCKET_CLOSING )return ; -if (info->count) { -#if ((LINUX_VERSION_CODE <VERSION_CODE (2 ,5 ,0 )) && defined(MODULE )) -MOD_DEC_USE_COUNT ; -#endif +if (info->count)atomic_dec (&rp_num_ports_open); - }clear_bit ((info->aiop *8 ) + info->chan, (void *) &xmit_flags[info->board]); info->count =0 ;
@@ -2344,17 +2201,9 @@for (aiop =0 ; aiop < max_num_aiops; aiop++) ctlp->AiopNumChan[aiop] = ports_per_aiop; -#if LINUX_VERSION_CODE <VERSION_CODE (2 ,3 ,99 ) -printk (KERN_INFO "Comtrol PCI controller #%d ID 0x%x found at 0x%lx, " -"%d AIOP(s) (%s)\n" , i, dev->device, rcktpt_io_addr[i], - num_aiops, rocketModel[i].modelString); -#else -printk - ("Comtrol PCI controller #%d ID 0x%x found in bus:slot:fn %s at address %04lx, " +printk ("Comtrol PCI controller #%d ID 0x%x found in bus:slot:fn %s at address %04lx, " "%d AIOP(s) (%s)\n" , i, dev->device, dev->slot_name, rcktpt_io_addr[i], num_aiops, rocketModel[i].modelString); -#endif - printk(KERN_INFO "Installing %s, creating /dev/ttyR%d - %ld\n", rocketModel[i].modelString, rocketModel[i].startingPortNumber,
@@ -2391,9 +2240,6 @@return (1 ); } -#if LINUX_VERSION_CODE >VERSION_CODE (2 ,3 ,99 )/* Linux version 2.4 and greater */ - -/* * Probes for PCI cards, inits them if found * Input: board_found = number of ISA boards already found, or the
@@ -2413,51 +2259,6 @@ return (count); } -#else /* Linux version 2.2 */ - -/* -* Linux 2.2 pci_find_device() does not allow a search of all devices for a certain vendor, -* you have to try each device ID. Comtrol device ID's are 0x0000 -0x000F for the original -* boards. Newer board are 0x08xx (see upci_ids[]). -*/ -static int __init init_PCI (int boards_found) -{ -int j, count =0 ; -struct pci_dev *dev =NULL ; - -static int upci_ids[] = { -PCI_DEVICE_ID_URP32INTF , -PCI_DEVICE_ID_URP8INTF , -PCI_DEVICE_ID_URP16INTF , -PCI_DEVICE_ID_CRP16INTF , -PCI_DEVICE_ID_URP8OCTA , -PCI_DEVICE_ID_UPCI_RM3_8PORT , -PCI_DEVICE_ID_UPCI_RM3_4PORT - }; - -#define NUM_UPCI_IDS (sizeof(upci_ids) / sizeof(upci_ids[0])) - -/* Try finding devices with PCI ID's 0x0000 - 0x000F */ -for (j =0 ; j <16 ; j++) { -while ((dev =pci_find_device (PCI_VENDOR_ID_RP , j, dev))) { -register_PCI (count + boards_found, dev); - count++; - } - } - -/* Now try finding the UPCI devices, which have PCI ID's 0x0800 - 0x080F */ -for (j =0 ; j <NUM_UPCI_IDS ; j++) { -while ((dev = -pci_find_device (PCI_VENDOR_ID_RP , upci_ids[j], dev))) { -register_PCI (count + boards_found, dev); - count++; - } - } -return (count); -} - -#endif /* Linux version 2.2/2.4 */ -#endif /* CONFIG_PCI */ /*
@@ -2465,7 +2266,7 @@* Input: i = the board number to look for * Returns: 1 if board found, 0 else */ -static int __init init_ISA (int i,int *reserved_controller) +static int __init init_ISA (int i) {int num_aiops, num_chan =0 , total_num_chan =0 ;int aiop, chan;
@@ -2473,20 +2274,16 @@CONTROLLER_t *ctlp;char *type_string; -if (rcktpt_io_addr[i] ==0 || controller ==0 ) +/* If io_addr is zero, no board configured */ +if (rcktpt_io_addr[i] ==0 )return (0 ); -if (check_region (rcktpt_io_addr[i],64 )) { -printk (KERN_INFO "RocketPort board address 0x%lx in use...\n" , rcktpt_io_addr[i]); +/* Reserve the IO region */ +if (!request_region (rcktpt_io_addr[i],64 ,"Comtrol RocketPort" )) { +printk (KERN_INFO "Unable to reserve IO region for configured ISA RocketPort at address 0x%lx, board not installed...\n" , rcktpt_io_addr[i]); rcktpt_io_addr[i] =0 ;return (0 ); } -if (rcktpt_io_addr[i] +0x40 == controller) { - *reserved_controller =1 ; -request_region (rcktpt_io_addr[i],68 ,"Comtrol RocketPort" ); - }else { -request_region (rcktpt_io_addr[i],64 ,"Comtrol RocketPort" ); - } ctlp =sCtlNumToCtlPtr (i);
@@ -2522,24 +2319,22 @@for (aiop =0 ; aiop <MAX_AIOPS_PER_BOARD ; aiop++) aiopio[aiop] = rcktpt_io_addr[i] + (aiop *0x400 ); - num_aiops = -sInitController (ctlp, i, controller + (i *0x400 ), aiopio,MAX_AIOPS_PER_BOARD ,0 ,FREQ_DIS ,0 ); + num_aiops =sInitController (ctlp, i, controller + (i *0x400 ), aiopio,MAX_AIOPS_PER_BOARD ,0 ,FREQ_DIS ,0 );if (ctlp->boardType ==ROCKET_TYPE_PC104 ) {sEnAiop (ctlp,2 );/* only one AIOPIC, but these */ sEnAiop (ctlp,3 );/* CSels used for other stuff */ } +/* If something went wrong initing the AIOP's release the ISA IO memory */ if (num_aiops <=0 ) { -if (rcktpt_io_addr[i] +0x40 == controller) { - *reserved_controller =0 ; -release_region (rcktpt_io_addr[i],68 ); - }else { -release_region (rcktpt_io_addr[i],64 ); - } +release_region (rcktpt_io_addr[i],64 ); rcktpt_io_addr[i] =0 ;return (0 ); } + + rocketModel[i].startingPortNumber = nextLineNumber; +for (aiop =0 ; aiop < num_aiops; aiop++) {sResetAiopByNum (ctlp, aiop);sEnAiop (ctlp, aiop);
@@ -2565,9 +2360,9 @@ rocketModel[i].numPorts = total_num_chan; rocketModel[i].model =MODEL_ISA ; -printk (KERN_INFO "Comtrol ISA controller #%d found at 0x%lx, " -"%d AIOPs %s\n" , i, rcktpt_io_addr[i], num_aiops, - type_string); +printk (KERN_INFO "RocketPort ISA card #%d found at 0x%lx - %d AIOPs %s\n" , + i, rcktpt_io_addr[i], num_aiops, type_string); + printk(KERN_INFO "Installing %s, creating /dev/ttyR%d - %ld\n", rocketModel[i].modelString, rocketModel[i].startingPortNumber,
@@ -2595,10 +2390,8 @@ .break_ctl = rp_break, .send_xchar = rp_send_xchar, .wait_until_sent = rp_wait_until_sent, -#if (LINUX_VERSION_CODE >VERSION_CODE (2 ,5 ,0 )) .tiocmget = rp_tiocmget, .tiocmset = rp_tiocmset, -#endif /* Kernel > 2.5 */ };/*
@@ -2607,7 +2400,6 @@int __init rp_init (void ) {int retval, pci_boards_found, isa_boards_found, i; -int reserved_controller =0 ;printk (KERN_INFO "RocketPort device driver module, version %s, %s\n" ,ROCKET_VERSION ,ROCKET_DATE );
@@ -2634,12 +2426,20 @@ nextLineNumber =0 ;memset (rocketModel,0 ,sizeof (rocketModel)); -if (board1 && controller ==0 ) - controller = board1 +0x40 ; +/* +* If board 1 is non-zero, there is at least one ISA configured. If controller is +* zero, use the default controller IO address of board1 + 0x40. +*/ +if (board1) { +if (controller ==0 ) + controller = board1 +0x40 ; + }else { + controller =0 ;/* Used as a flag, meaning no ISA boards */ + } -if (controller &&check_region (controller,4 )) { -printk (KERN_INFO "Controller IO addresses in use, unloading driver.\n" ); -put_tty_driver (rocket_driver); +/* If an ISA card is configured, reserve the 4 byte IO space for the Mudbac controller */ +if (controller && (!request_region (controller,4 ,"Comtrol RocketPort" ))) { +printk (KERN_INFO "Unable to reserve IO region for first configured ISA RocketPort controller 0x%lx. Driver exiting \n" , controller);return -EBUSY ; }
@@ -2663,9 +2463,7 @@* driver with the tty layer. */ -#if (LINUX_VERSION_CODE >VERSION_CODE (2 ,5 ,0 )) rocket_driver->owner =THIS_MODULE ; -#endif /* Kernel > 2.5 */ rocket_driver->flags =TTY_DRIVER_NO_DEVFS ; rocket_driver->devfs_name ="tts/R" ; rocket_driver->name ="ttyR" ;
@@ -2701,7 +2499,7 @@ pci_boards_found =0 ;for (i =0 ; i <NUM_BOARDS ; i++) { -if (init_ISA (i, &reserved_controller)) +if (init_ISA (i)) isa_boards_found++; }
@@ -2720,13 +2518,6 @@return -ENXIO ; } -if (isa_boards_found) { -if (reserved_controller ==0 ) -request_region (controller,4 ,"Comtrol RocketPort" ); - }else { - controller =0 ; - } -return 0 ; }
@@ -2736,7 +2527,6 @@ {int retval;int i; -int released_controller =0 ;del_timer_sync (&rocket_timer);
@@ -2754,14 +2544,9 @@for (i =0 ; i <NUM_BOARDS ; i++) {if (rcktpt_io_addr[i] <=0 || is_PCI[i])continue ; -if (rcktpt_io_addr[i] +0x40 == controller) { - released_controller++; -release_region (rcktpt_io_addr[i],68 ); - }else { -release_region (rcktpt_io_addr[i],64 ); - } +release_region (rcktpt_io_addr[i],64 ); } -if (controller && released_controller ==0 ) +if (controller) release_region(controller, 4); }#endif
drivers/char/rocket.h +2 -22
@@ -1,29 +1,9 @@/* -* rocket.h --- the exported interface of the rocket driver to -* its configuration program. +* rocket.h --- the exported interface of the rocket driver to its configuration program. * * Written by Theodore Ts'o, Copyright 1997. +* Copyright 1997 Comtrol Corporation. * -* Copyright 1994, 1997, 2003 Comtrol Corporation. All Rights Reserved. -* -* The following source code is subject to Comtrol Corporation's -* Developer's License Agreement. -* -* This source code is protected by United States copyright law and -* international copyright treaties. -* -* This source code may only be used to develop software products that -* will operate with Comtrol brand hardware. -* -* You may not reproduce nor distribute this source code in its original -* form but must produce a derivative work which includes portions of -* this source code only. -* -* The portions of this source code which you use in your derivative -* work must bear Comtrol's copyright notice: -* -* Copyright 1994 Comtrol Corporation. -* */ /* Model Information Struct */
drivers/char/rocket_int.h +2 -44
71 lines not on this page · raw message
drivers/pci/pci.ids +2 -0
@@ -3752,6 +3752,8 @@ 0005 Rocketport 8 port w/octa cable 0006 Rocketport 8 port w/RJ11 connectors 0007 Rocketport 4 port w/RJ11 connectors + 0008 Rocketport 8 port w/ DB78 SNI (Siemens) connector + 0009 Rocketport 16 port w/ DB78 SNI (Siemens) connector 000a Rocketport Plus 4 port 000b Rocketport Plus 8 port 000c RocketModem 6 port
include/linux/pci_ids.h +2 -0
@@ -1399,6 +1399,8 @@#define PCI_DEVICE_ID_RP8OCTA 0x0005#define PCI_DEVICE_ID_RP8J 0x0006#define PCI_DEVICE_ID_RP4J 0x0007 +#define PCI_DEVICE_ID_RP8SNI 0x0008 +#define PCI_DEVICE_ID_RP16SNI 0x0009#define PCI_DEVICE_ID_RPP4 0x000A#define PCI_DEVICE_ID_RPP8 0x000B#define PCI_DEVICE_ID_RP8M 0x000C
Review
Quoted 9 lines · Greg KH
ChangeSet 1.1308, 2003/06/13 12:36:16-07:00, [email protected]
[PATCH] Rocket patch against 2.5.70-bk18
Here is rocket driver patch against 2.5.70-bk18. Changes are:
(quoted diff) +0
-3- Removed non-GPL license text from headers - Removed check_region()/request_region() raciness - Made the driver a >2.5 driver only (as you had suggested)
Please also remove all those silly indirection macros added to rocket_int.h in the last update.
Quoted 3 lines · Greg KH
Here is rocket driver patch against 2.5.70-bk18. Changes are:
- Removed non-GPL license text from headers
Cleared that with the writer(s)? Including it in the kernel might have been a mistake from their part...
Signature · 4 lines
Dr. Horst H. von Brand User #22616 counter.li.org Departamento de Informatica Fono: +56 32 654431 Universidad Tecnica Federico Santa Maria +56 32 654239 Casilla 110-V, Valparaiso, Chile Fax: +56 32 797513
Quoted 7 lines · Horst von Brand
Quoted 3 lines · Greg KH
Here is rocket driver patch against 2.5.70-bk18. Changes are:
- Removed non-GPL license text from headers
Cleared that with the writer(s)? Including it in the kernel might have been a mistake from their part...
Did you see who wrote that patch? :)
greg k-h