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: James S. <jsi...@us...> - 2001-11-02 23:34:09
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs/images In directory usw-pr-cvs1:/tmp/cvs-serv12353/images Log Message: Directory /cvsroot/linuxconsole/ruby/web/htdocs/images added to the repository |
From: James S. <jsi...@us...> - 2001-11-02 23:33:31
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv12215 Added Files: adapters.html hardware.html index.html input.html joystick.html links.html quick.html Log Message: Placing nice web pages here so syncing them is easy. --- NEW FILE: adapters.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> <img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="quick.html">Quick Start</a> - <a href="index.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Sun keyboard to PC serial port adapter</h2> <p> Many people have dreamed having their Sun Type 4 or Type 5 keyboard attached to their Linux box up to now. And with this adapter, it is finally possible. Because the standard Sun keyboards use TTL RS232 at 1200 bps to talk to the Suns, it's very easy to make them talk to any non-Sun computer by converting this to true RS232. All what you need is a MAX232 chip that'll take care about the correct voltage levels, and also some chip to invert the signals (CD4049 in the pic, I've used a 7400 quad-nand myself), since the MAX232 inverts them as well, and we don't need this. This all easily fits into a 25-pin serial connector. The schematic below was drawn by Leonardo M. Teixiera <leo...@in...>. <p> <div align=center> <img src="sunkbd.png" alt="Sun to RS232 interface schematic" width=578 height=366> </div> <p> <h2>Parport to AUX port adapter</h2> <p> In some cases one kbd port and one aux port is not enough and you may want to add another keyboard or mouse. You can use this adapter, together with the parkbd.c module for that. Schematics will follow sometime later. <p> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: hardware.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> <img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="quick.html">Quick Start</a> - <a href="index.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2><a name="hardware">Supported hardware</a></h2> <p> Currently supported devices are: <p> <ul> <li>PS/2 port controllers <ul> <li>i8042 AT kbd+aux controller <li>ct82c710 aux controller <li>Q40 kbd controller <li>Acorn RiscPC kbd controller <li>parport to aux adapter </ul> <li>Serial ports <ul> <li>serial port line discipline </ul> <li>Game ports <ul> <li>NS558 compatible gameports <ul> <li>Legacy ISA gameports <li>ISA PnP gameports <li>PCI gameports (SB Live!) </ul> <li>PCI ADC gameports <ul> <li>Aureal Vortex <li>Aureal Vortex2 <li>Trident 4DWave/DX <li>Trident 4DWave/NX </ul> <li>PDPI Lightning 4 advanced gameport card </ul> <li>PS/2 devices <ul> <li>AT keyboards (Set 2 and Set 3) <ul> <li>Set 2 (AT) keyboards native mode <li>Set 3 (PS/2) keyboards native mode <li>Set 2 Extended (IBM RapidAccess, Chicony ...) keyboards </ul> <li>XT keyboards <li>PS/2 mice <ul> <li>Standard PS/2 mice <li>Microsoft IntelliMouse/IntelliEye and other ImPS/2 mice <li>Mictosoft IntelliMouse Explorer and other ImExPS/2 5-button mice <li>Genius NetMouse/NetScroll and other GenPS/2 mice <li>Logitech Pilot, MouseMan, and other PS/2++ mice <li>Logitech TouchPad 3 (PS/2T++) </ul> </ul> <li>Serial devices <ul> <li>Serial mice (MSC, Sun, MS, MMan, IntelliMouse and MMWheel) <ul> <li>MouseSystems mice <li>Microsoft 2-button mice <li>Microsoft mice w/ middle-button detection <li>Logitech/Genius 3-button MS mode mice (MouseMan) <li>Microsoft IntelliMouse mice <li>Logitech MouseManWheel mice </ul> <li>Sun keyboards <ul> <li>Type 4 Sun keyboards <li>Type 5 Sun keyboards </ul> <li>Logitech WingMan Warrior joystick <li>LogiCad3d Magellan 6dof controllers <li>LabTec SpaceOrb/Avenger 6dof controller <li>LabTec SpaceBall 4000 FLX 6dof controller <li>Gunze AHL-51S touchscreen <li>Gravis Stinger <li>I-Force based joysticks and wheels (without force feedback) <ul> <li>Logitech WingMan Force <li>Logitech WingMan Force Wheel <li>Guillemot Race Leader Wheel <li>and others </ul> </ul> <li>Gameport devices <ul> <li>Analog joysticks and gamepads <ul> <li>Standard analog joysticks <li>CH FlightStick Pro compatible joysticks <li>ThrustMaster FCS compatible joysticks <li>Genius 6 and 8 button compatible gamepads <li>Saitek Cyborg 3D Digital <li>Saitek Cyborg 3D Digital Pad <li>Saitek R4 Racing Wheel </ul> <li>Assasin 3D and MadCatz Panther devices <ul> <li>FP-Gaming Assasin 3D trackball + ADC gameport <li>MadCatz Panther trackball + ADC gameport <li>MadCatz Panther XL joystick </ul> <li>Logitech ADI digital joysticks and gamepads <ul> <li>Logitech CyberMan 2 <li>Logitech ThunderPad Digital <li>Logitech WingMan Extreme Digital <li>Logitech WingMan Extreme Digital 3D <li>Logitech WingMan Formula <li>Logitech WingMan Gamepad <li>Logitech WingMan Gamepad Extreme <li>Logitech WingMan Gamepad USB <li>Logitech WingMan Interceptor </ul> <li>Creative Labs Blaster Cobra gamepad <li>Genius Digital joysticks <ul> <li>Genius Flight2000 F-23 joystick <li>Genius Flight2000 F-31 joystick <li>Genius G-09D gamepad (without force feedback) </ul> <li>Gravis GrIP joysticks and gamepads <ul> <li>Gravis GamePad Pro <li>Gravis BlackHawk Digital joystick <li>Gravis Xterminator Digital gamepad <li>Gravis Xterminator DualControl joystick </ul> <li>InterAct digital joysticks and gamepads <ul> <li>InterAct HammerHead/FX gamepad (without force feedback) <li>InterAct ProPad8 gamepad </ul> <li>ThrustMaster DirectConnect joysticks and gamepads <ul> <li>ThrustMaster Millenium 3D Inceptor <li>ThrustMaster Rage 3D <li>ThrustMaster FragMaster <li>ThrustMaster Fusion Digital Game Pad <li>ThrustMaster Attack Throttle </ul> <li>Microsoft SideWinder digital joysticks and gamepads <ul> <li>Microsoft SideWinder 3D Pro <li>Microsoft SideWinder Force Feedback Pro (without force feedback) <li>Microsoft SideWinder Force Feedback Wheel (without force feedback) <li>Microsoft SideWinder FreeStyle Pro <li>Microsoft SideWinder GamePad <li>Microsoft SideWinder Precision Pro <li>Microsoft SideWinder Precision Pro USB </ul> </ul> <li>Parallel port devices <ul> <li>Gaming console joysticks and gamepads <ul> <li>Multisystem joysticks (Atari, Amiga, Commodore, Amstrad) <li>Nintendo 64 gamepads <li>Nintendo Entertainment System (and clone - SVI, Pegasus ...) gamepads <li>Sega Genesis (MegaDrive) gamepads <li>Sega Genesis extended 5 and 6 button gamepads <li>Sega Master System gamepads <li>Sega Saturn gamepads <li>Sony PSX Analog gamepads <li>Sony PSX DualShock gamepads <li>Sony PSX gamepads <li>Sony PSX JogCon gamepads <li>Sony PSX MadCatz wheel <li>Sony PSX Namco stick <li>Sony PSX NegCon gamepads <li>Super Nintendo Entertainment System gamepads <li>0.8.0.2 Multisystem joystick interface <li>SNESKey/DirectPadPro parallel port joystick interfaces <li>TurboGraFX parallel port joystick interface </ul> </ul> <li>Bus devices <ul> <li>Inport busmice <ul> <li>Microsoft InPort busmouse <li>ATI XL busmouse </ul> <li>Logitech busmice <li>IBM PC110 touchpad <li>Amiga input devices <ul> <li>Amiga keyboard <li>Amiga mouse <li>Amiga digital joystick </ul> <li>Acorn RiscPC mouse </ul> <li>USB devices <ul> <li>Human Interface Device standard (HID) devices <ul> <li>HID Mice (w/ wheel) <li>HID Keyboards <li>HID Joysticks and gamepads <li>HID Digitizers and tablets </ul> <li>HID Boot Protocol devices <ul> <li>HIDBP Keyboards <li>HIDBP Mice </ul> <li>I-Force based joysticks and wheels (without force feedback) <ul> <li>Logitech WingMan Force <li>Logitech WingMan Force Wheel <li>and others </ul> <li>Wacom digitizers <ul> <li>Wacom Graphire <li>Wacom Intuos 4x5 <li>Wacom Intuos 6x8 <li>Wacom Intuos 9x12 <li>Wacom Intuos 12x12 <li>Wacom Intuos 12x18 </ul> </ul> </ul> <p> Devices that have a good chance to be supported soon: <p> <ul> <li>A4-Tech double-wheel MagicChip mice <li>HammerHead/FX and PSX RumblePack with ForceFeedback! <li>LabTec SpaceBall 2003 FLX <li>LabTec SpaceBall 3003 FLX <li>LogiCad3D CyberPuck <li>LogiCad3D Magellan Plus <li>Logitech CyberMan </ul> <p> Devices for which there is a hope to be supported sometime: <p> <ul> <li>Art+Com Joystick-Connect <li>BG Systems BeeBox <li>BG Systems CerealBox & FlyPanel <li>BG Systems FlyBox <li>Colorado Spectrum Notebook Gameport <li>Colorado Spectrum Workstation Gameport <li>Gravis GrIP MultiPort <li>I-Force force feedback <li>Immersion Impulse Engine 2000 <li>Immersion Interface Box <li>Logitech 3D Mouse <li>Microsoft SideWinder Force Feedback Pro & Wheel with ForceFeedback <li>Pegasus FreeD <li>Technology Playgroup Unwinder <li>ThrustMaster serial joysticks </ul> <p> If you have any input devices you'd like to be supported by these drivers, tell me! <p> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: index.html --- <!doctype HTML public "-//W3O//DTD W3 HTML 3.2//EN"> <HTML> <HEAD> <link rev=made href=mailto:es...@sn...> <meta name="description" content="Home page of the Linux Console Project"> <meta name="keywords" content="linux, input, framebuffer, vga, mda, console, ANSI, ECMA-48"> <TITLE>The Linux Console Project</TITLE> </HEAD> <BODY> <H1 ALIGN=CENTER>The Linux Console Project</H1> <center> Powered by:<br> <A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=3063&type=1" width="88" height="31" border="0" alt="SourceForge"></A> </center> <p> <H1>Charter and Objectives:</H1> Our charter is to clean up and properly maintain the Linux console sub system. There has been scattered work on the console going on for some time. This project will try to pull it all together into a coherent architecture from which we can generate clean patches for Linus and the core kernel team.<p> Right now the console subsystem has a couple of problems: <ol> <li> <li>Terminal emulation is much too intertwined with the lower levels of the console implementation (e.g. fbdev). Eventually terminal emulations should be loadable modules.<p> <li>The built-in ANSI X3.64/ECMA-48 terminal emulation is incomplete and in some respects incorrect.<p> </ol> There's demand for many features that have not yet been implemented. These include: <ul> <li> Multi-head operation -- console instances running on multiple (possibly dissimilar) video cards. <li> A scrollback buffer implemented in the console itself. <li> Support for different fonts, keymaps, and textmodes per VC. <li> Better Unicode support. </ul> <H1>Deliverables:</H1> This project aims to deliver these things:<p> <ol> <li> Ruby: A line of patches for 2.4.x that implements the heavy stuff; fbdev refactoring, multihead, scrollback, etc. These can't go in until 2.5.x.<p> </ol> <H1>Project Status:</H1> Development is moving fast.<p> <H1>People:</H1> <dl> <dt> <a href="mailto:jsi...@tr...">James Simmons</a> <dd> Project admin on SourceForge. The release master. Doing fbdev refactoring, multihead support.<p> <dt><a href="mailto:dom...@un...">Dominik Kubla</a> <dd> Doing ANSI/ECMA-48 terminal emulation coding.<p> <dt><a href="mailto:es...@th...">Eric S. Raymond</a> <dd>Project webmaster, co-admin, and documentation person. Interested in terminfo and ANSI conformance. (Eric maintains the master terminfo file.)<p> <dt><a href="vo...@su...">Vojtech Pavlik</a> <dd>Interested in input device refactoring. </dl> <H1>Related Resources:</H1> <ul> <li>Our <a href="http://sourceforge.net/project/?group_id=3063">SourceForge page</a>.<p> <li>Dominik Kubla's <a href="http://www-klinik.uni-mainz.de/staff/kubla/Linux/">emulation patches</a>; these will probably be the basis of our first two deliverables.<p> <li>Vojtech Pavlik's <a href="input.html">input drivers</a>, a previous effort in this direction which we have integrated.<p> <li> EvStack, another previous attempt associated with the GGI project. There is a <a href="http://zhrodague.net/~jmcc/ggi/EvStack">home site</a>; you can also browse some <a href="http://zhrodague.net/~jmcc/ggi/EvStack/paper/">documentation</a> describing their architecture and approach.<p> <li>Steffen Seeger tells us that his <a href="http://kgi.sourceforge.net">KGI implementation</a> tries to carry forward some of the EvStack ideas while being `less invasive'.<p> <li><a href="mailto:And...@cw...">Andries Brouwer</a> maintains the Linux kernel keyboard support and kbd tools.<p> <li>The <a href="http://www.tuxedo.org/~esr/terminfo">terminfo/termcap</a> home page.<p> <li>The <a href="http://vt100.net">VT Terminal Information</a> site. These people have the VT220 reference manual online.<p> <li>The <a href="ftp://ftp.clark.net/pub/dickey/vttest/vttest.tar.gz">vttest</a> program tests an emulations's conformance to a VT100.<p> </ul> <HR> <ADDRESS>James Simmons <A HREF="mailto:jsi...@tr..."><jsi...@tr...></A></ADDRESS> </BODY> </HTML> --- NEW FILE: input.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> <img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="quick.html">Quick Start</a> - <a href="index.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <p> <h2><a name="introduction">Introduction</a></h2> <p> The Linux Input Driver project is a project that replace the current handling of keyboards, mice and joysticks in Linux. It's finally modular, and attempts to merge as much of architecture independent code as possible. For mice, keyboards, joysticks and other input devices it tries to create a simple, easy to program for and uniform API, with straightforward binding to XInput. <p> The project is progressing quite rapidly, already supporting all previously supported PC/x86 devices, and more. Support for other architectures is lagging a little, but that's going to be fixed soon. <p> Many of the drivers were improved significantly during the proces of rewriting them for the Input Driver project - for example serial MouseSystems mice have two times the refresh rate with the Input Drivers (48 updates/sec), which makes them finally comfortable to use, AT keyboards and PS/2 mice can be plugged in and out at runtime, without problems, analog joysticks have much better resolution (9-12 bits). No more problems with autorepeat on Toshiba laptops, because autorepeat is done by software. It will soon offer tighter integration with <a href="http://www.alsa-project.org">ALSA</a> sound drivers for better gameport support. And more and more. <p> Parts of the Input Driver project are already integrated in the kernel - the core, userland interface modules and USB input device drivers are a part of the <a href="http://www.linux-usb.org/">kernel USB support</a>. A patch was created to replace the in-kernel Joystick Driver project with new Input Drivers. It adds significant benefits and fixes many bugs. Because the joystick driver is self contained and because the existing USB input device support will be use, there is a hope this change will happen in the 2.4 kernel cycle. See <a href="joystick.html">http://www.suse.cz/development/input/joystick.html</a>. <p> Replacing current keyboard and mouse drivers is a much larger surgery to the kernel, although needed badly. Because of that, integration of the rest of the Input Driver project will have to wait till the release of a developmental 2.5 kernel. It will go together with the rest of the <a href="http://linuxconsole.sourceforge.net/">Linux Console Project</a>. <p> <h2><a name="news">News</a></h2> <p> 2000/08/19 - Fixed support for PSX pads<br> 2000/08/19 - Added IM Explorer support, changed mousedev to emulate IM Ex instead of GenPS/2 for 5 buttons<br> 2000/08/18 - Added support for IBM RapidAccess and Chicony multimedia keyboards<br> 2000/08/17 - Fixed ns558 to correctly allocate its i/o region.<br> 2000/08/17 - Added a link to Franz Sirl's <a href="http://home.munich.netsurf.de/Franz.Sirl/inputppc.html">Input/PPC</a> page<br> 2000/08/17 - Merged in kernel USB fixes, fixed GenPS/2 emulation<br> 2000/07/14 - Fixed direction gamepad in sidewinder<br> 2000/06/25 - Fixed gamecon and db9<br> 2000/06/24 - Fixed support for SpaceBall 4000 FLX<br> 2000/06/23 - Fixed oops in joydev, evdev and mousedev<br> 2000/06/22 - Joystick input drivers are in the 2.4.0-test2 kernel!<br> 2000/06/21 - Created a joystick-only input patch, see <a href="joystick.html">http://www.suse.cz/development/input/joystick.html</a><br> 2000/06/21 - Added support for ESS Solo1 and S3 SonicVibes PCI gameports<br> 2000/06/08 - Updated installation guidelines - see Quick Start<br> 2000/06/08 - Added support for two ThrustMaster DirectConnect joysticks on one gameport, fully functional<br> 2000/06/07 - Saitek Cyborg 3D support fully functional in the analog driver<br> 2000/06/06 - Added support for Gravis Xterminator DualControl, better support for Xterminator Digital<br> <p> <h2><a name="version">Current version</a></h2> <p> The Input Drivers are still under heavy development. Because of that, it is not convenient to make versioned tarball or even rpm/deb releases, because for them to be useful the releases would have to be too frequent. <p> We are using CVS for keeping and distriubiting the drivers right now. As soon as the driver reach some state where they wouldn't happen to be obsoleted by new versions every few days, I'll make a bigger release - 1.0.0 - of the drivers. For now, the drivers are in the same CVS tree as the <a href="http://linuxconsole.sourceforge.net/">Linux Console Project</a>. This is because they depend on each other a lot and thus it is useful to develop them together. Also, you might want to take a look at the <a href="http://sourceforge.net/project/?group_id=3063">SourceForge page</a> of the Console/Input project. <p> <h2><a name="documentation">Documentation</a></h2> <p> You can find some documentation in the <code>linux/Documentation/input</code> directory in the CVS tree - it's not much, but it should get you started. A lot of it will come later, when I'm finished with writing the drivers. Anyway, using and configuring the drivers is very straightforward, so I don't think you'll have any trouble with that. Should you have any, just mail me, the e-mail address is at the end of this page. <p> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: joystick.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> <img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="quick.html">Quick Start</a> - <a href="index.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Joystick driver v2.0.0</h2> This is the next generation Linux joystick driver. It's based on the input drivers, but doesn't contain all of the input driver changes, just those needed so support all the joysticks. <p> It supports all joysticks the original joystick driver did (see <a href="hardware.html">Supported Hardware</a>) and a couple more, all bugs I knew of in the 1.2.15 driver are fixed and namely the detection of gameports was enhanced significantly. <p> The v2.0 driver is currently for 2.4 kernels only, but if enough people will need it, I can back port it to v2.2 kernels. There is no patch for the 2.4 kernels anymore, the driver is included in the official Linus's kernels now. <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: links.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> <img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="quick.html">Quick Start</a> - <a href="index.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Related projects</h2> <ul> <li><a href="http://linuxconsole.sourceforge.net/">Linux Console Project</a> <li><a href="http://home.munich.netsurf.de/Franz.Sirl/inputppc.html">Franz Sirl's Input/PPC page</a> <li><a href="http://www.suse.cz/development/joystick/">Linux joystick driver project</a> <li><a href="http://www.alsa-project.org/">Linux Advanced Sound Architecture project</a> <li><a href="http://www.linux-usb.org">Linux USB project</a> </ul> <p> <h3>Linux mouse software</h3> <p> Following is a list of programs that support mice under Linux: <p> <ul> <li><a href="http://www.xfree86.org">XFree86</a> and all X programs <li><a href="http://www.svgalib.org">SVGAlib</a> <li>GPM </ul> <h3>Linux joystick software</h3> <p> Following is a list of programs that support joysticks under Linux: <p> <ul> <li><a href="http://www-unix.oit.umass.edu/~tetron/joy2key.html">joy2key</a> <li><a href="http://www.ditch.org/kbstick/">kbstick</a> <li><a href="http://www.h.shuttle.de/mitch/joyd.en.html">joyd</a> <li><a href="http://www.muppetlabs.com/linux/descent/">LDescent (with patches)</a> <li><a href="http://www.warpcore.org/~sekmu/d1x/source.html">D1 X Project</a> <li><a href="http://www.snes9x.com">SNES9x</a> <li><a href="http://www.cs.cmu.edu/~dsladic/vice/vice.html">VICE</a> <li><a href="http://xmame.retrogames.com">X-Mame</a> <li><a href="http://www.philosys.de/~kunze/xzx/">XZX</a> <li><a href="http://www.humboldt1.com/~ognir/dgen-sdl.html">DGen/SDL</a> <li><a href="http://tmmm.simplenet.com/tuxnes/index.html">TuxNES</a> <li><a href="http://www.aegistech.com/bfris-b.html">BFRIS</a> <li><a href="http://www.alphalink.com.au/~michg/ace/itetris">Intelligent Tetris</a> <li><a href="http://fox.mit.edu/xsw/">XShipWars</a> <li><a href="http://perso.club-internet.fr/hewat/carworld/carworld.htm">CarWorld</a> <li><a href="http://rcswww.urz.tu-dresden.de/~thenlich/poti/">Poti</a> <li><a href="http://www.kevinsworld.com/#LinuxStuff">JavaJoystick</a> <li><a href="http://www.asta.uni-essen.de/~raoul/resources/mjstest.c">Multiple Joystick test</a> <li><a href="http://www.trylinux.com/projects/joystick/gxtest.c">Curses Joystick test</a> <li><a href="http://fox.mit.edu/xsw/libjsw.htm">UNIX Joystick Driver wrapper library</a> <li><a href="http://www.geocities.com/SiliconValley/Vista/2964/linux.html">kcmjoy</a> <li><a href="http://www.geocities.com/CapeCanaveral/Lab/7731/jsr.html">JSR daemon</a> <li><a href="http://home.tu-clausthal.de/student/iMaze/">iMaze</a> <li><a href="http://www.xfree86.org/">XFree86</a> <li><a href="ftp://sunsite.unc.edu/pub/Linux/games/x11/video/rocks_n_diamonds-0.9b.tgz">Rocks'n'Diamonds</a> <li><a href="http://limax.paru.cas.cz/~hubicka/koules/English/koules.html">Koules</a> <li><a href="http://www.freiburg.linux.de/~uae/">UAE</a> <li><a href="http://sabre.cobite.com">Sabre</a> <li><a href="http://www.classicgaming.com/stella/">Stella</a> <li>ZapEm <li>SAsteroids <li>Xtet42 <li>Last Defender </ul> <p> <h3>Hardware documentation</h3> <p> Information on hardware programming joysticks can be found at: <p> <ul> <li>The driver source code ;-) <li>My own <a href="http://WWWSITE/joystick/specs.txt">specs.txt</a> notes <li><a href="http://www.hut.fi/Misc/Electronics/docs/joystick/">Joystick docs</a> at <a href="mailto:tom...@ik...">Tomi Engdahl</a>'s <a href="http://www.hut.fi/Misc/Electronics/index.html">electronics info page</a> <li><a href="http://www.funny.demon.co.uk/extreme/gravis.html">Linux AGGPP Driver</a> by <a href="mailto:tr...@fu...?subject=Extreme: GrIP driver">Thomas Rolfes</a> </ul> <p> <h3>Manufacturers</h3> <p> Here is a list of joystick (or other related device) manufacturers. Some seem not to have web pages. Updates to this table are welcome. <p> <ul> <li><a href="http://www.a4tech.com.tw/joy.html">A4Tech</a> <li><a href="http://www.actlab.com/gamegear/controllers/racing/index.htm">ACT Labs</a> <li>Agiler <li>Alfa Data <li><a href="http://www.alphadactyl.com/">AlphaDactyl</a> <li><a href="http://www.alpsusa.com/cgibin/var/alpsusa/index.html">Alps</a> <li>ArcadePro <li><a href="http://www.ariston.com/joystick.htm">Ariston</a> <li><a href="http://www.cosmosel.it/arowana/pag05.htm">Arowana</a> <li><a href="http://www.artcom.de">Art+Com</a> <li><a href="http://www.asciient.com/">ASCII Entertainment</a> <li><a href="http://www.bgsystems.com/">BG Systems</a> <li><a href="http://www.boeder.es/Productos/0cat03.htm">Boeder</a> <li><a href="http://www.chproducts.com/pcgear.html">CH Products</a> <li>Colorado Spectrum <li><a href="http://www.cppl.com.au/cobra.html">Creative Labs</a> <li><a href="http://ourworld.compuserve.com/homepages/extreme/">ECCI</a> <li><a href="http://www.fpgaming.com/index.html">FP Gaming</a> <li><a href="http://www.genreality.com/">General Reality</a> <li><a href="http://www.genius.kye.de/english/joy/joystick.htm">Genius</a> <li><a href="http://globaldevices.com/">Global Devices</a> <li><a href="http://www.gravis.com/products/">Gravis</a> <li><a href="http://www.happcontrols.com/amusement/joysticks/joysticks.htm">Happ Controls</a> <li><a href="http://www.force-feedback.com/">I-Force</a> <li><a href="http://www.imgpresents.com/jambox.htm">IMG</a> <li><a href="http://www.immerse.com">Immersion Corporation</a> <li><a href="http://www.interactiveio.com/iio1.htm">Interactive I/O</a> <li><a href="http://www.interact-acc.com/interactpc/gaming/index.html">InterAct</a> <li><a href="http://www.jcdesigns.com/gamecard/index.html">JC Designs</a> <li><a href="http://www.just4fun.de/produkt_e.htm">Just</a> <li><a href="http://www.leda.co.uk/UK/frames-uk.htm">LMP</a> <li><a href="http://www.computeraffair.com.au/l3main.html">Logic 3</a> <li><a href="http://www.logicad3d.com">LogiCad3D</a> <li><a href="http://www.logitech.ch">Logitech</a> <li><a href="http://www.madcatz.com/pc_lower.html">MadCatz</a> <li><a href="http://www.mcci.com/mcci/usbjoy.htm">MCCI</a> <li><a href="http://www.eu.microsoft.com/products/hardware/sidewinder/quick.htm">Microsoft</a> <li><a href="http://www.mousesystems.com/store/pcjoy_menu.htm">Mouse Systems</a> <li><a href="http://www.pdpi.net/">PDPI</a> <li><a href="http://www.pegatech.com/prod.html">Pegasus Technologies</a> <li><a href="http://www.polhemus.com/">Polhemus</a> <li><a href="http://www.primax-elec.com/game-O.htm">Primax</a> <li><a href="http://www.quickshot.com/gamecont.html">QuickShot</a> <li><a href="http://www.rockfire.com.tw/">Rockfire</a> <li><a href="http://www.saitek.com/products.html">Saitek</a> <li><a href="http://www.platinumsound.com/">SC&T</a> <li><a href="http://www.spacetec.com/PRODUCTS/prodover.htm">SpaceTec IMC</a> <li><a href="http://www.suncominc.com/products.html">Suncom</a> <li><a href="http://this.is/tpg/products/unwinder/">Technology PlayGroup</a> <li>TecnoPlus <li><a href="http://www.thrustmaster.com/products/products.htm">ThrustMaster</a> <li>Terra <li><a href="http://www.new-kewl.com/new-and-kewl/spots/spot-vivitar.html">Vivitar</a> <li>ZYE Technology </ul> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> --- NEW FILE: quick.html --- <!DOCTYPE "-//IETF//DTD HTML 3.2//EN" PUBLIC> <html> <head> <meta name="description" content="Linux Input drivers"> <meta name="keywords" content="joystick gamepad keyboard mouse wheel force feedback touchpad tablet input device linux driver gnu"> <title>Linux Input Drivers</title> <LINK REV=MADE HREF="mailto:vo...@su..."> </head> <body text="#000000" bgcolor="#ffffff"> <table border=0 cellspacing=0 cellpadding=0 width="100%" bgcolor="#FFFFFF"> <tr><td><img SRC="l1i.png" border=0 width=32 height=64 alt=""><br></td><td width="100%" background="m1i.png"> <img src="title.png" border=0 alt="Linux Input Drivers" width=512 height=64><br></td><td> <img SRC="r1i.png" border=0 width=32 height=64 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td></td><td> <img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <div align=center><strong> <a href="http://www.suse.cz/development/">SuSE Labs</a> - <a href="index.html#introduction">Introduction</a> - <a href="index.html#news">News</a> - <a href="quick.html#download">Download</a> - <a href="joystick.html">Joysticks</a> - <a href="quick.html">Quick Start</a> - <a href="index.html#documentation">Documentation</a> - <a href="hardware.html">Supported Hardware</a> - <a href="adapters.html">Adapters</a> - <a href="links.html">Links</a><br> </strong></div></td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l4i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r4i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l6i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br></td><td> <img src="r6i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l2i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r2i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td background="l3i.png"><img src="l3i.png" border=0 width=32 height=16 alt=""><br></td><td> <!-----------------------------------------------------------------------------------------------------------> <h2>Quick Start</h2> This section describes how to download, compile and use the Input Drivers. Change to your source directory, fasten your seatbelts, and here we go: <p> <code> cd /usr/src<br> </code> <p> <h2><a name="download">Download</a></h2> <p> You can get the development tree and necessary utilities via <a href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/ruby/?cvsroot=linuxconsole">CVS</a>. To access the CVS you can use the following commands (use an empty password): <p> <code> cvs -d :pserver:ano...@cv...:/cvsroot/linuxconsole login<br> cvs -z3 -d :pserver:ano...@cv...:/cvsroot/linuxconsole checkout ruby<br> </code> <p> Once you have downloaded the CVS, you can always update it to the most recent version using the following command: <p> <code> cvs -z3 update ruby<br> </code> <p> <h2>Patching</h2> <p> To compile and use the files you download, you first have to get a 2.4 kernel to use the drivers with. You can get it from <code><a href="ftp://ftp.kernel.org/pub/linux/kernel/v2.4/">ftp.kernel.org</a></code>. <p> <code> wget ftp://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.0-test1.tar.bz2<br> mv linux linux-old<br> tar xIvf linux-2.4.0-test1.tar.bz2<br> </code> <p> When you've got the kernel unpacked, you have to copy the ruby files over it, and clean files not used anymore: <p> <code> cd ruby/linux<br> cp -avP * ../../linux/<br> cd ../../linux<br> sh ../ruby/utils/remove-unused-files<br> </code> <p> <h2>Configuration</h2> <p> Then you configure the kernel: <p> <code> make menuconfig<br> </code> <p> This part is a little tricky. You have to select quite a bunch of options to have your system operate correctly. For a most usual setup with a PS/2 mouse and a AT keyboard you need to select: <p> <code> Input device support ---><br> Input device support<br> i8042 aux+kbd controller<br> AT and PS/2 keyboards<br> PS/2 mouse<br> Mouse interface<br> </code> <p> For a setup with an USB mouse and keyboard you'd use: <p> <code> USB support ---><br> Support for USB<br> Preliminary USB device filesystem<br> UHCI (Intel PIIX4, VIA, ...) support<br> OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support<br> Input device support ---><br> Input device support<br> USB Human Interface Device<br> Mouse interface<br> </code> <p> For serial mice you need: <p> <code> Input device support ---><br> Serial port input line discipline<br> Serial mouse<br> Mouse interface<br> </code> <p> And in your init scripts a call to the inputattach utility (can be found in the utils subdir in the ruby tree). See the help for this utility about what the command line will be for your mouse - there are quite a couple different types of them. <p> <code> inputattach -t mman /dev/ttyS0 &<br> </code> <p> To get an analog joystick working, you add: <p> <code> Input device support ---><br> ns558 gameports<br> Analog joysticks and gamepads<br> Joystick interface<br> </code> <p> For other joystick types and gameport types you can select other joystick and gameport drivers if you have them. The same for mice, keyboards and other drivers. <p> When you're done with configuring the kernel, you compile and install it (make sure your /etc/lilo.conf has an entry for this new kernel): <p> <code> make dep modules modules_install bzImage<br> cp arch/i386/boot/bzImage /boot/vmlinuz<br> lilo<br> </code> <p> Then, to keep a working system after you boot with the new kernel, you also need to change a couple nodes in /dev: <p> <code> cd /dev<br> mkdir old<br> mv mouse js? old<br> mkdir input<br> cd input<br> mknod js0 c 13 0<br> mknod js1 c 13 1<br> mknod js2 c 13 2<br> mknod js3 c 13 3<br> mknod mouse0 c 13 32<br> mknod mouse1 c 13 33<br> mknod mouse2 c 13 34<br> mknod mouse3 c 13 35<br> mknod mice c 13 63<br> mknod event0 c 13 64<br> mknod event1 c 13 65<br> mknod event2 c 13 66<br> mknod event3 c 13 67<br> cd ..<br> ln -s input/js0 js0<br> ln -s input/js1 js1<br> ln -s input/mice mouse<br> </code> <p> After this, reboot, load any modules you didn't compile straight into the kernel, and everything should work. If it doesn't, well, something went wrong. <p> <!-----------------------------------------------------------------------------------------------------------> <address> <p>Send any questions, comments, bug reports to: <a href="mailto:vo...@su...">Vojtech Pavlik <vo...@su...></a></p> </address> <div align=center> <a href="http://www.suse.cz/"><img src="sponsor.png" alt="Sponsored by SuSE" border=0 width=298 height=61></a> </div> </td><td background="r3i.png"><img src="r3i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l5i.png" border=0 width=32 height=16 alt=""><br></td><td> </td><td><img SRC="r5i.png" border=0 width=32 height=16 alt=""><br></td></tr> <tr><td><img src="l7i.png" border=0 width=32 height=16 alt=""><br></td><td background="m2i.png"> <img src="m2i.png" border=0 width=32 height=16 alt=""><br> </td><td><img SRC="r7i.png" border=0 width=32 height=16 alt=""><br></td></tr> </table> </body> </html> |
From: James S. <jsi...@us...> - 2001-11-02 23:31:52
|
Update of /cvsroot/linuxconsole/ruby/web/htdocs In directory usw-pr-cvs1:/tmp/cvs-serv11825/htdocs Log Message: Directory /cvsroot/linuxconsole/ruby/web/htdocs added to the repository |
From: James S. <jsi...@us...> - 2001-11-02 23:31:26
|
Update of /cvsroot/linuxconsole/ruby/web/cgi-bin In directory usw-pr-cvs1:/tmp/cvs-serv11750/cgi-bin Log Message: Directory /cvsroot/linuxconsole/ruby/web/cgi-bin added to the repository |
From: Paul M. <le...@us...> - 2001-11-02 20:56:48
|
Update of /cvsroot/linuxconsole/ruby/web In directory usw-pr-cvs1:/tmp/cvs-serv1998 Removed Files: index.php Log Message: Default SF page is utterly useless.. die die die.. --- index.php DELETED --- |
From: James S. <jsi...@us...> - 2001-11-02 20:44:43
|
Update of /cvsroot/linuxconsole/ruby/web In directory usw-pr-cvs1:/tmp/cvs-serv26883 Added Files: index.html index.php Log Message: Placed web site here for peopel to work on it. --- NEW FILE: index.html --- <!doctype HTML public "-//W3O//DTD W3 HTML 3.2//EN"> <HTML> <HEAD> <link rev=made href=mailto:es...@sn...> <meta name="description" content="Home page of the Linux Console Project"> <meta name="keywords" content="linux, console, ANSI, ECMA-48"> <TITLE>The Linux Console Project</TITLE> </HEAD> <BODY> <H1 ALIGN=CENTER>The Linux Console Project</H1> <center> Powered by:<br> <A href="http://sourceforge.net"> <IMG src="http://sourceforge.net/sflogo.php?group_id=3063&type=1" width="88" height="31" border="0" alt="SourceForge"></A> </center> <p> <H1>Charter and Objectives:</H1> Our charter is to clean up and properly maintain the Linux console driver. There has been scattered work on the console going on for some time. This project will try to pull it all together into a coherent architecture from which we can generate clean patches for Linus and the core kernel team.<p> Right now the console has a couple of problems: <ol> <li>The built-in ANSI X3.64/ECMA-48 terminal emulation is incomplete and in some respects incorrect.<p> <li>Terminal emulation is much too intertwined with the lower levels of the console implementation (e.g. fbdev). Eventually terminal emulations should be loadable modules.<p> </ol> There's demand for many features that have not yet been implemented. These include: <ul> <li> Multi-head operation -- console instances running on multiple (possibly dissimilar) video cards. <li> A scrollback buffer implemented in the console itself. <li> Support for different fonts, keymaps, and textmodes per VC. <li> Better Unicode support. </ul> <H1>Deliverables:</H1> This project aims to deliver three things:<p> <ol> <li> Sapphire: console.c and man page patches for 2.0.x and 2.2.x to fix ANSI conformance in the terminal emulation. These need to go to Alan Cox for merging into the stable tree.<p> <li> Emerald: console.c and man page patches for 2.3.x to fix ANSI conformance in the terminal emulation. These need to go to Linus for inclusion before 2.4.<p> <li> Ruby: A line of patches for 2.4.x that implements the heavy stuff; fbdev refactoring, multihead, scrollback, etc. These can't go in until 2.5.x.<p> </ol> <H1>Project Status:</H1> Development is moving fast. We already have candidate Sapphire and Emerald patches that work. We expect to be able to ship Sapphire and Emerald, with full documentation, before the end of March 2000.<p> <H1>People:</H1> <dl> <dt> <a href="mailto:jsi...@li...">James Simmons</a> <dd> Project admin on SourceForge. The release master. Doing fbdev refactoring, multihead support.<p> <dt><a href="mailto:dom...@un...">Dominik Kubla</a> <dd> Doing ANSI/ECMA-48 terminal emulation coding.<p> <dt><a href="mailto:es...@th...">Eric S. Raymond</a> <dd>Project webmaster, co-admin, and documentation person. Interested in terminfo and ANSI conformance. (Eric maintains the master terminfo file.)<p> <dt><a href="vo...@su...">Vojtech Pavlik</a> <dd>Interested in input device refactoring. </dl> <H1>Related Resources:</H1> <ul> <li>Our <a href="http://sourceforge.net/project/?group_id=3063">SourceForge page</a>.<p> <li>Dominik Kubla's <a href="http://www-klinik.uni-mainz.de/staff/kubla/Linux/">emulation patches</a>; these will probably be the basis of our first two deliverables.<p> <li>Vojtech Pavlik's <a href="http://www.suse.cz/development/input/">input drivers</a>, a previous effort in this direction which we hope to integrate.<p> <li> EvStack, another previous attempt associated with the GGI project. There is a <a href="http://zhrodague.net/~jmcc/ggi/EvStack">home site</a>; you can also browse some <a href="http://zhrodague.net/~jmcc/ggi/EvStack/paper/">documentation</a> describing their architecture and approach.<p> <li>Steffen Seeger tells us that his <a href="http://kgi.sourceforge.net">KGI implementation</a> tries to carry forward some of the EvStack ideas while being `less invasive'.<p> <li><a href="mailto:And...@cw...">Andries Brouwer</a> maintains the Linux kernel keyboard support and kbd tools.<p> <li>The <a href="http://www.tuxedo.org/~esr/terminfo">terminfo/termcap</a> home page.<p> <li>The <a href="http://vt100.net">VT Terminal Information</a> site. These people have the VT220 reference manual online.<p> <li>The <a href="ftp://ftp.clark.net/pub/dickey/vttest/vttest.tar.gz">vttest</a> program tests an emulations's conformance to a VT100.<p> </ul> <HR> <ADDRESS>Eric S. Raymond <A HREF="mailto:es...@th..."><es...@th...></A></ADDRESS> </BODY> </HTML> --- NEW FILE: index.php --- <HTML> <HEAD> <TITLE>SourceForge: Welcome</TITLE> <LINK rel="stylesheet" href="http://sourceforge.net/sourceforge.css" type="text/css"> </HEAD> <BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> <!-- top strip --> <TABLE width="100%" border=0 cellspacing=0 cellpadding=2 bgcolor="737b9c"> <TR> <TD><SPAN class=maintitlebar> <A class=maintitlebar href="http://sourceforge.net/"><B>Home</B></A> | <A class=maintitlebar href="http://sourceforge.net/about.php"><B>About</B></A> | <A class=maintitlebar href="http://sourceforge.net/partners.php"><B>Partners</B></a> | <A class=maintitlebar href="http://sourceforge.net/contact.php"><B>Contact Us</B></A></SPAN></TD> </TD> </TR> </TABLE> <!-- end top strip --> <!-- top title table --> <TABLE width="100%" border=0 cellspacing=0 cellpadding=0 bgcolor="" valign="center"> <TR valign="top" bgcolor="#eeeef8"> <TD> <A href="http://sourceforge.net/"><IMG src="http://sourceforge.net/images/sflogo2-steel.png" vspace="0" border=0 width="143" height="70"></A> </TD> <TD width="99%"><!-- right of logo --> <a href="http://www.valinux.com"><IMG src="http://sourceforge.net/images/va-btn-small-light.png" align="right" alt="VA Linux Systems" hspace="5" vspace="7" border=0 width="136" height="40"></A> </TD><!-- right of logo --> </TR> <TR><TD bgcolor="#543a48" colspan=2><IMG src="http://sourceforge.net/images/blank.gif" height=2 vspace=0></TD></TR> </TABLE> <!-- end top title table --> <!-- center table --> <TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="#FFFFFF" align="center"> <TR> <TD> <CENTER><BR> <H1>Welcome to http://linuxconsole.sourceforge.net:80/</H1> <P>We're Sorry but this Project hasn't yet uploaded their personal webpage yet.<BR> Please check back soon for updates or visit <A href="http://sourceforge.net/">SourceForge</A></P><BR> </CENTER> </TD> </TR> </TABLE> <!-- end center table --> <!-- footer table --> <TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> <TR> <TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> All trademarks and copyrights on this page are properties of their respective owners. Forum comments are owned by the poster. The rest is copyright ©1999-2000 VA Linux Systems, Inc.</SPAN></FONT> </TD> </TR> </TABLE> <!-- end footer table --> </BODY> </HTML> |
From: James S. <jsi...@us...> - 2001-11-02 20:38:08
|
Update of /cvsroot/linuxconsole/ruby/web In directory usw-pr-cvs1:/tmp/cvs-serv24462/web Log Message: Directory /cvsroot/linuxconsole/ruby/web added to the repository |
From: James S. <jsi...@us...> - 2001-11-02 20:29:17
|
Update of /cvsroot/linuxconsole/ruby/docs In directory usw-pr-cvs1:/tmp/cvs-serv22310 Added Files: console.txt Log Message: Early start to my white paper about this project. Pretty shotty. I will improve it. Feel free to add to it. --- NEW FILE: console.txt --- New console infrastructure for Linux Revision 1.0. of 10/18/01 James Simmons jsi...@tr... Abstract This documentation describes a proposal for a new console system for linux. The goal of the new design is break the interdepenancy of many subsystems on the console system. In this model the console system instead is a abstract layer constructed of seperate hardware subsystems that can function on their own. Such a design allows for much more flexability. 1. Introduction As linux is ported to more and more different flavors of hardware we are beginning to see the need to redesign many parts of the kernel. The reason being that linux was originally done on the 32 bit intel platform. Thus many parts of the kernel design was ix86 centeric. Over time this has changed and still continues to change. The console redesign is another such a change to support the needs of these many new devices to linux. 2. Problem. 3. Semantics 3.1.1 4. New structs |
From: James S. <jsi...@us...> - 2001-11-02 20:27:27
|
Update of /cvsroot/linuxconsole/ruby/docs In directory usw-pr-cvs1:/tmp/cvs-serv21850/docs Log Message: Directory /cvsroot/linuxconsole/ruby/docs added to the repository |
From: James S. <jsi...@us...> - 2001-11-02 17:38:07
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/input In directory usw-pr-cvs1:/tmp/cvs-serv27320 Modified Files: Makefile Added Files: maple_keyb.c maplemouse.c Log Message: Added in SH Dreamcast input drivers. --- NEW FILE: maple_keyb.c --- /* * $Id: maple_keyb.c,v 1.1 2001/11/02 17:27:32 jsimmons Exp $ * SEGA Dreamcast keyboard driver * Based on drivers/usb/usbkbd.c */ #include <linux/kernel.h> #include <linux/malloc.h> #include <linux/input.h> #include <linux/module.h> #include <linux/init.h> #include <linux/timer.h> #include <linux/maple.h> MODULE_AUTHOR("YAEGASHI Takeshi <t...@ke...>"); MODULE_DESCRIPTION("SEGA Dreamcast keyboard driver"); static unsigned char dc_kbd_keycode[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, 0, 0, 0,124, 0,181,182,183,184,185,186,187,188,189, 190,191,192,193,194,195,196,197,198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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 }; struct dc_kbd { struct input_dev dev; unsigned char new[8]; unsigned char old[8]; int open; }; static void dc_scan_kbd(struct dc_kbd *kbd) { int i; struct input_dev *dev = &kbd->dev; for(i=0; i<8; i++) input_report_key(dev, dc_kbd_keycode[i+224], (kbd->new[0]>>i)&1); for(i=2; i<8; i++) { if(kbd->old[i]>3&&memscan(kbd->new+2, kbd->old[i], 6)==NULL) { if(dc_kbd_keycode[kbd->old[i]]) input_report_key(dev, dc_kbd_keycode[kbd->old[i]], 0); else printk("Unknown key (scancode %#x) released.", kbd->old[i]); } if(kbd->new[i]>3&&memscan(kbd->old+2, kbd->new[i], 6)!=NULL) { if(dc_kbd_keycode[kbd->new[i]]) input_report_key(dev, dc_kbd_keycode[kbd->new[i]], 1); else printk("Unknown key (scancode %#x) pressed.", kbd->new[i]); } } memcpy(kbd->old, kbd->new, 8); } static void dc_kbd_callback(struct mapleq *mq) { struct maple_device *mapledev = mq->dev; struct dc_kbd *kbd = mapledev->private_data; unsigned long *buf = mq->recvbuf; if (buf[1] == mapledev->function) { memcpy(kbd->new, buf+2, 8); dc_scan_kbd(kbd); } } static int dc_kbd_open(struct input_dev *dev) { struct dc_kbd *kbd = dev->private; kbd->open++; return 0; } static void dc_kbd_close(struct input_dev *dev) { struct dc_kbd *kbd = dev->private; kbd->open--; } static int dc_kbd_connect(struct maple_device *dev) { int i; unsigned long data = be32_to_cpu(dev->devinfo.function_data[0]); struct dc_kbd *kbd; if (!(kbd = kmalloc(sizeof(struct dc_kbd), GFP_KERNEL))) return -1; memset(kbd, 0, sizeof(struct dc_kbd)); dev->private_data = kbd; kbd->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP); for (i=0; i<255; i++) set_bit(dc_kbd_keycode[i], kbd->dev.keybit); clear_bit(0, kbd->dev.keybit); kbd->dev.private = kbd; kbd->dev.open = dc_kbd_open; kbd->dev.close = dc_kbd_close; kbd->dev.event = NULL; kbd->dev.name = dev->product_name; kbd->dev.idbus = BUS_MAPLE; input_register_device(&kbd->dev); maple_getcond_callback(dev, dc_kbd_callback, 1, MAPLE_FUNC_KEYBOARD); printk(KERN_INFO "input%d: keyboard(0x%lx): %s\n", kbd->dev.number, data, kbd->dev.name); MOD_INC_USE_COUNT; return 0; } static void dc_kbd_disconnect(struct maple_device *dev) { struct dc_kbd *kbd = dev->private_data; input_unregister_device(&kbd->dev); kfree(kbd); MOD_DEC_USE_COUNT; } static struct maple_driver dc_kbd_driver = { function: MAPLE_FUNC_KEYBOARD, name: "Dreamcast keyboard", connect: dc_kbd_connect, disconnect: dc_kbd_disconnect, }; static int __init dc_kbd_init(void) { maple_register_driver(&dc_kbd_driver); return 0; } static void __exit dc_kbd_exit(void) { maple_unregister_driver(&dc_kbd_driver); } module_init(dc_kbd_init); module_exit(dc_kbd_exit); /* * Local variables: * c-basic-offset: 8 * End: */ --- NEW FILE: maplemouse.c --- /* * $Id: maplemouse.c,v 1.1 2001/11/02 17:27:32 jsimmons Exp $ * SEGA Dreamcast mouse driver * Based on drivers/usb/usbmouse.c */ #include <linux/kernel.h> #include <linux/malloc.h> #include <linux/input.h> #include <linux/module.h> #include <linux/init.h> #include <linux/timer.h> #include <linux/maple.h> MODULE_AUTHOR("YAEGASHI Takeshi <t...@ke...>"); MODULE_DESCRIPTION("SEGA Dreamcast mouse driver"); struct dc_mouse { struct input_dev dev; int open; }; static void dc_mouse_callback(struct mapleq *mq) { int buttons, relx, rely, relz; struct maple_device *mapledev = mq->dev; struct dc_mouse *mouse = mapledev->private_data; struct input_dev *dev = &mouse->dev; unsigned char *res = mq->recvbuf; buttons = ~res[8]; relx=*(unsigned short *)(res+12)-512; rely=*(unsigned short *)(res+14)-512; relz=*(unsigned short *)(res+16)-512; input_report_key(dev, BTN_LEFT, buttons&4); input_report_key(dev, BTN_MIDDLE, buttons&9); input_report_key(dev, BTN_RIGHT, buttons&2); input_report_rel(dev, REL_X, relx); input_report_rel(dev, REL_Y, rely); input_report_rel(dev, REL_WHEEL, relz); } static int dc_mouse_open(struct input_dev *dev) { struct dc_mouse *mouse = dev->private; mouse->open++; return 0; } static void dc_mouse_close(struct input_dev *dev) { struct dc_mouse *mouse = dev->private; mouse->open--; } static int dc_mouse_connect(struct maple_device *dev) { unsigned long data = be32_to_cpu(dev->devinfo.function_data[0]); struct dc_mouse *mouse; if (!(mouse = kmalloc(sizeof(struct dc_mouse), GFP_KERNEL))) return -1; memset(mouse, 0, sizeof(struct dc_mouse)); dev->private_data = mouse; mouse->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REL); mouse->dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_RIGHT) | BIT(BTN_MIDDLE); mouse->dev.relbit[0] = BIT(REL_X) | BIT(REL_Y) | BIT(REL_WHEEL); mouse->dev.private = mouse; mouse->dev.open = dc_mouse_open; mouse->dev.close = dc_mouse_close; mouse->dev.event = NULL; mouse->dev.name = dev->product_name; mouse->dev.idbus = BUS_MAPLE; input_register_device(&mouse->dev); maple_getcond_callback(dev, dc_mouse_callback, 1, MAPLE_FUNC_MOUSE); printk(KERN_INFO "input%d: mouse(0x%lx): %s\n", mouse->dev.number, data, mouse->dev.name); MOD_INC_USE_COUNT; return 0; } static void dc_mouse_disconnect(struct maple_device *dev) { struct dc_mouse *mouse = dev->private_data; input_unregister_device(&mouse->dev); kfree(mouse); MOD_DEC_USE_COUNT; } static struct maple_driver dc_mouse_driver = { function: MAPLE_FUNC_MOUSE, name: "Dreamcast mouse", connect: dc_mouse_connect, disconnect: dc_mouse_disconnect, }; static int __init dc_mouse_init(void) { maple_register_driver(&dc_mouse_driver); return 0; } static void __exit dc_mouse_exit(void) { maple_unregister_driver(&dc_mouse_driver); } module_init(dc_mouse_init); module_exit(dc_mouse_exit); /* * Local variables: * c-basic-offset: 8 * End: */ Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/input/Makefile,v retrieving revision 1.43 retrieving revision 1.44 diff -u -d -r1.43 -r1.44 --- Makefile 2001/10/16 21:05:57 1.43 +++ Makefile 2001/11/02 17:27:32 1.44 @@ -116,6 +116,9 @@ obj-$(CONFIG_INPUT_ADBHID) += adbhid.o obj-$(CONFIG_MAC_EMUMOUSEBTN) += mac_hid.o +obj-$(CONFIG_MAPLE_KEYBOARD) += maple_keyb.o +obj-$(CONFIG_MAPLE_MOUSE) += maplemouse.o + obj-$(CONFIG_INPUT_KEYBDEV) += keybdev.o obj-$(CONFIG_INPUT_MOUSEDEV) += mousedev.o obj-$(CONFIG_INPUT_JOYDEV) += joydev.o |
From: James S. <jsi...@us...> - 2001-11-02 17:34:57
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video In directory usw-pr-cvs1:/tmp/cvs-serv4433 Added Files: pvr2fb.c Log Message: Added in DC framebuffer support. Did a few changes to make it rubytized but it needs many more. --- NEW FILE: pvr2fb.c --- /* drivers/video/pvr2fb.c * * Frame buffer and fbcon support for the NEC PowerVR2 found within the Sega * Dreamcast. * * Copyright (c) 2001 M. R. Brown <mr...@0x...> * Copyright (c) 2001 Paul Mundt <le...@ch...> * * This file is part of the LinuxDC project (linuxdc.sourceforge.net). * */ /* * This driver is mostly based on the excellent amifb and vfb sources. It uses * an odd scheme for converting hardware values to/from framebuffer values, here are * some hacked-up formulas: * * The Dreamcast has screen offsets from each side of it's four borders and the start * offsets of the display window. I used these values to calculate 'pseudo' values [...1043 lines suppressed...] else mode_option = this_opt; } if (*cable_arg) cable_type = pvr2_get_param(cables, cable_arg, 0, 3); if (*output_arg) video_output = pvr2_get_param(outputs, output_arg, 0, 3); return 0; } #endif #ifdef MODULE MODULE_LICENSE("GPL"); module_init(pvr2fb_init); #endif module_exit(pvr2fb_exit); |
From: James S. <jsi...@us...> - 2001-11-02 00:57:50
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/acorn/char In directory usw-pr-cvs1:/tmp/cvs-serv5606/linux/drivers/acorn/char Modified Files: Makefile Log Message: Synced as much as possible to ARM tree. Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/acorn/char/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- Makefile 2001/03/07 04:42:27 1.6 +++ Makefile 2001/11/02 00:57:43 1.7 @@ -18,8 +18,6 @@ obj-n := obj- := -obj-clps7500 := defkeymap-acorn.o - obj-$(CONFIG_ATOMWIDE_SERIAL) += serial-atomwide.o obj-$(CONFIG_DUALSP_SERIAL) += serial-dualsp.o obj-$(CONFIG_ARCH_ACORN) += defkeymap-acorn.o i2c.o pcf8583.o |
From: James S. <jsi...@us...> - 2001-11-02 00:57:50
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/char In directory usw-pr-cvs1:/tmp/cvs-serv5606/linux/drivers/char Modified Files: Config.in Makefile misc.c Log Message: Synced as much as possible to ARM tree. Index: Config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/Config.in,v retrieving revision 1.28 retrieving revision 1.29 diff -u -d -r1.28 -r1.29 --- Config.in 2001/10/29 00:10:59 1.28 +++ Config.in 2001/11/02 00:57:43 1.29 @@ -90,15 +90,6 @@ if [ "$CONFIG_EXPERIMENTAL" = "y" -a "$CONFIG_ZORRO" = "y" ]; then tristate 'Commodore A2232 serial support (EXPERIMENTAL)' CONFIG_A2232 fi -if [ "$CONFIG_FOOTBRIDGE" = "y" ]; then - bool 'DC21285 serial port support' CONFIG_SERIAL_21285 - if [ "$CONFIG_SERIAL_21285" = "y" ]; then - if [ "$CONFIG_OBSOLETE" = "y" ]; then - bool ' Use /dev/ttyS0 device (OBSOLETE)' CONFIG_SERIAL_21285_OLD - fi - bool ' Console on DC21285 serial port' CONFIG_SERIAL_21285_CONSOLE - fi -fi bool 'Unix98 PTY support' CONFIG_UNIX98_PTYS if [ "$CONFIG_UNIX98_PTYS" = "y" ]; then int 'Maximum number of Unix98 PTYs in use (0-2048)' CONFIG_UNIX98_PTY_COUNT 256 @@ -174,6 +165,9 @@ fi if [ "$CONFIG_OBSOLETE" = "y" -a "$CONFIG_ALPHA_BOOK1" = "y" ]; then bool 'Tadpole ANA H8 Support' CONFIG_H8 +fi +if [ "$CONFIG_ARCH_SA1100" = "y" ]; then + tristate 'SA1100 Real Time Clock' CONFIG_SA1100_RTC fi tristate 'Double Talk PC internal speech card support' CONFIG_DTLK Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/Makefile,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- Makefile 2001/10/29 00:10:59 1.29 +++ Makefile 2001/11/02 00:57:43 1.30 @@ -42,9 +42,6 @@ obj-$(CONFIG_VT) += vt.o vt_ioctl.o decvte.o vc_screen.o consolemap.o consolemap_deftbl.o selection.o keyboard.o defkeymap.o obj-$(CONFIG_SERIAL) += $(SERIAL) -obj-$(CONFIG_SERIAL_21285) += serial_21285.o -obj-$(CONFIG_SERIAL_SA1100) += serial_sa1100.o -obj-$(CONFIG_SERIAL_AMBA) += serial_amba.o obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o obj-$(CONFIG_ATARI_DSP56K) += dsp56k.o @@ -83,6 +80,7 @@ obj-$(CONFIG_SONYPI) += sonypi.o obj-$(CONFIG_RTC) += rtc.o obj-$(CONFIG_EFI_RTC) += efirtc.o +obj-$(CONFIG_SA1100_RTC) += sa1100-rtc.o ifeq ($(CONFIG_PPC),) obj-$(CONFIG_NVRAM) += nvram.o endif @@ -125,6 +123,8 @@ obj-$(CONFIG_I810_TCO) += i810-tco.o obj-$(CONFIG_MACHZ_WDT) += machzwd.o obj-$(CONFIG_SH_WDT) += shwdt.o +obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt.o +obj-$(CONFIG_SA1100_WATCHDOG) += sa1100_wdt.o obj-$(CONFIG_SOFT_WATCHDOG) += softdog.o subdir-$(CONFIG_MWAVE) += mwave Index: misc.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/char/misc.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- misc.c 2001/05/28 19:57:29 1.14 +++ misc.c 2001/11/02 00:57:43 1.15 @@ -269,9 +269,6 @@ #ifdef CONFIG_SGI_NEWPORT_GFX gfx_register (); #endif -#ifdef CONFIG_SGI - streamable_init (); -#endif #ifdef CONFIG_TOSHIBA tosh_init(); #endif |
From: James S. <jsi...@us...> - 2001-11-02 00:57:50
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel In directory usw-pr-cvs1:/tmp/cvs-serv5606/linux/arch/arm/kernel Modified Files: setup.c traps.c Log Message: Synced as much as possible to ARM tree. Index: setup.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel/setup.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- setup.c 2001/08/26 16:02:27 1.4 +++ setup.c 2001/11/02 00:57:43 1.5 @@ -258,10 +258,10 @@ struct resource *res; int i; - kernel_code.start = __virt_to_bus(init_mm.start_code); - kernel_code.end = __virt_to_bus(init_mm.end_code - 1); - kernel_data.start = __virt_to_bus(init_mm.end_code); - kernel_data.end = __virt_to_bus(init_mm.brk - 1); + kernel_code.start = __virt_to_phys(init_mm.start_code); + kernel_code.end = __virt_to_phys(init_mm.end_code - 1); + kernel_data.start = __virt_to_phys(init_mm.end_code); + kernel_data.end = __virt_to_phys(init_mm.brk - 1); for (i = 0; i < mi->nr_banks; i++) { unsigned long virt_start, virt_end; @@ -338,7 +338,7 @@ } meminfo.bank[meminfo.nr_banks].start = tag->u.mem.start; meminfo.bank[meminfo.nr_banks].size = tag->u.mem.size; - meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(tag->u.mem.start); + meminfo.bank[meminfo.nr_banks].node = PHYS_TO_NID(tag->u.mem.start); meminfo.nr_banks += 1; return 0; @@ -510,9 +510,44 @@ init_arch_irq = mdesc->init_irq; } -int get_cpuinfo(char * buffer) +static const char *hwcap_str[] = { + "swp", + "half", + "thumb", + "26bit", + "fastmult", + "fpa", + "vfp", + "edsp", + NULL +}; + +/* + * get_cpuinfo - Get information on one CPU for use by the procfs. + * + * Prints info on the next CPU into buffer. Beware, doesn't check for + * buffer overflow. Current implementation of procfs assumes that the + * resulting data is <= 1K. + * + * Args: + * buffer -- you guessed it, the data buffer + * cpu_np -- Input: next cpu to get (start at 0). Output: Updated. + * + * Returns number of bytes written to buffer. + */ + +int get_cpuinfo(char *buffer, unsigned *cpu_np) { char *p = buffer; + unsigned n; + int i; + + /* No SMP at the moment, so just toggle 0/1 */ + n = *cpu_np; + *cpu_np = 1; + if (n != 0) { + return (0); + } p += sprintf(p, "Processor\t: %s %s rev %d (%s)\n", proc_info.manufacturer, proc_info.cpu_name, @@ -521,6 +556,15 @@ p += sprintf(p, "BogoMIPS\t: %lu.%02lu\n", loops_per_jiffy / (500000/HZ), (loops_per_jiffy / (5000/HZ)) % 100); + + /* dump out the processor features */ + p += sprintf(p, "Features\t: "); + + for (i = 0; hwcap_str[i]; i++) + if (elf_hwcap & (1 << i)) + p += sprintf(p, "%s ", hwcap_str[i]); + + p += sprintf(p, "\n\n"); p += sprintf(p, "Hardware\t: %s\n", machine_name); Index: traps.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/kernel/traps.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- traps.c 2001/09/02 23:27:15 1.1 +++ traps.c 2001/11/02 00:57:43 1.2 @@ -19,8 +19,10 @@ #include <linux/sched.h> #include <linux/mm.h> #include <linux/spinlock.h> +#include <linux/personality.h> #include <linux/ptrace.h> #include <linux/elf.h> +#include <linux/interrupt.h> #include <linux/init.h> #include <asm/atomic.h> @@ -175,7 +177,7 @@ printk("Process %s (pid: %d, stackpage=%08lx)\n", current->comm, current->pid, 4096+(unsigned long)tsk); - if (!user_mode(regs)) { + if (!user_mode(regs) || in_interrupt()) { mm_segment_t fs; /* @@ -208,12 +210,19 @@ asmlinkage void do_undefinstr(int address, struct pt_regs *regs, int mode) { - unsigned long addr = instruction_pointer(regs); + unsigned long *pc; siginfo_t info; + /* + * According to the ARM ARM, PC is 2 or 4 bytes ahead, depending + * whether we're in Thumb mode or not. + */ + regs->ARM_pc -= thumb_mode(regs) ? 2 : 4; + pc = (unsigned long *)instruction_pointer(regs); + #ifdef CONFIG_DEBUG_USER - printk(KERN_INFO "%s (%d): undefined instruction: pc=%08lx\n", - current->comm, current->pid, addr); + printk(KERN_INFO "%s (%d): undefined instruction: pc=%p\n", + current->comm, current->pid, pc); dump_instr(regs); #endif @@ -223,13 +232,14 @@ info.si_signo = SIGILL; info.si_errno = 0; info.si_code = ILL_ILLOPC; - info.si_addr = (void *)addr; + info.si_addr = pc; force_sig_info(SIGILL, &info, current); die_if_kernel("Oops - undefined instruction", regs, mode); } +#ifdef CONFIG_CPU_26 asmlinkage void do_excpt(int address, struct pt_regs *regs, int mode) { siginfo_t info; @@ -252,6 +262,7 @@ die_if_kernel("Oops - address exception", regs, mode); } +#endif asmlinkage void do_unexp_fiq (struct pt_regs *regs) { @@ -269,33 +280,84 @@ */ asmlinkage void bad_mode(struct pt_regs *regs, int reason, int proc_mode) { + unsigned int vectors = vectors_base(); + mm_segment_t fs; + console_verbose(); printk(KERN_CRIT "Bad mode in %s handler detected: mode %s\n", handler[reason], processor_modes[proc_mode]); /* + * We need to switch to kernel mode so that we can + * use __get_user to safely read from kernel space. + * Note that we now dump the code first, just in case + * the backtrace kills us. + */ + fs = get_fs(); + set_fs(KERNEL_DS); + + /* * Dump out the vectors and stub routines. Maybe a better solution * would be to dump them out only if we detect that they are corrupted. */ printk(KERN_CRIT "Vectors:\n"); - dump_mem(0, 0x40); + dump_mem(vectors, 0x40); printk(KERN_CRIT "Stubs:\n"); - dump_mem(0x200, 0x4b8); + dump_mem(vectors + 0x200, 0x4b8); + set_fs(fs); + die("Oops", regs, 0); cli(); panic("bad mode"); } +static int bad_syscall(int n, struct pt_regs *regs) +{ + siginfo_t info; + + /* You might think just testing `handler' would be enough, but PER_LINUX + * points it to no_lcall7 to catch undercover SVr4 binaries. Gutted. + */ + if (current->personality != PER_LINUX && current->exec_domain->handler) { + /* Hand it off to iBCS. The extra parameter and consequent type + * forcing is necessary because of the weird ARM calling convention. + */ + current->exec_domain->handler(n, regs); + return regs->ARM_r0; + } + +#ifdef CONFIG_DEBUG_USER + printk(KERN_ERR "[%d] %s: obsolete system call %08x.\n", + current->pid, current->comm, n); + dump_instr(regs); +#endif + + info.si_signo = SIGILL; + info.si_errno = 0; + info.si_code = ILL_ILLTRP; + info.si_addr = (void *)instruction_pointer(regs) - + (thumb_mode(regs) ? 2 : 4); + + force_sig_info(SIGILL, &info, current); + die_if_kernel("Oops", regs, n); + return regs->ARM_r0; +} + /* - * Handle some more esoteric system calls + * Handle all unrecognised system calls. + * 0x9f0000 - 0x9fffff are some more esoteric system calls */ +#define NR(x) ((__ARM_NR_##x) - __ARM_NR_BASE) asmlinkage int arm_syscall(int no, struct pt_regs *regs) { siginfo_t info; - switch (no) { + if ((no >> 16) != 0x9f) + return bad_syscall(no, regs); + + switch (no & 0xffff) { case 0: /* branch through 0 */ info.si_signo = SIGSEGV; info.si_errno = 0; @@ -305,9 +367,9 @@ force_sig_info(SIGSEGV, &info, current); die_if_kernel("branch through zero", regs, 0); - break; + return 0; - case 1: /* SWI BREAK_POINT */ + case NR(breakpoint): /* SWI BREAK_POINT */ /* * The PC is always left pointing at the next * instruction. Fix this. @@ -318,17 +380,50 @@ info.si_signo = SIGTRAP; info.si_errno = 0; info.si_code = TRAP_BRKPT; - info.si_addr = (void *)instruction_pointer(regs); + info.si_addr = (void *)instruction_pointer(regs) - + (thumb_mode(regs) ? 2 : 4); force_sig_info(SIGTRAP, &info, current); return regs->ARM_r0; - case 2: /* sys_cacheflush */ #ifdef CONFIG_CPU_32 - /* r0 = start, r1 = end, r2 = flags */ + /* + * Flush a region from virtual address 'r0' to virtual address 'r1' + * _inclusive_. There is no alignment requirement on either address; + * user space does not need to know the hardware cache layout. + * + * r2 contains flags. It should ALWAYS be passed as ZERO until it + * is defined to be something else. For now we ignore it, but may + * the fires of hell burn in your belly if you break this rule. ;) + * + * (at a later date, we may want to allow this call to not flush + * various aspects of the cache. Passing '0' will guarantee that + * everything necessary gets flushed to maintain consistency in + * the specified region). + */ + case NR(cacheflush): cpu_cache_clean_invalidate_range(regs->ARM_r0, regs->ARM_r1, 1); -#endif + return 0; + + case NR(usr26): + if (!(elf_hwcap & HWCAP_26BIT)) + break; + regs->ARM_cpsr &= ~0x10; + return regs->ARM_r0; + + case NR(usr32): + if (!(elf_hwcap & HWCAP_26BIT)) + break; + regs->ARM_cpsr |= 0x10; + return regs->ARM_r0; +#else + case NR(cacheflush): + return 0; + + case NR(usr26): + case NR(usr32): break; +#endif default: /* Calls 9f00xx..9f07ff are defined to return -ENOSYS @@ -337,45 +432,29 @@ a feature is supported. */ if (no <= 0x7ff) return -ENOSYS; -#ifdef CONFIG_DEBUG_USER - /* experience shows that these seem to indicate that - * something catastrophic has happened - */ - printk("[%d] %s: arm syscall %d\n", current->pid, current->comm, no); - dump_instr(regs); - if (user_mode(regs)) { - show_regs(regs); - c_backtrace(regs->ARM_fp, processor_mode(regs)); - } -#endif - force_sig(SIGILL, current); - die_if_kernel("Oops", regs, no); break; } - return 0; -} - -asmlinkage void deferred(int n, struct pt_regs *regs) -{ - /* You might think just testing `handler' would be enough, but PER_LINUX - * points it to no_lcall7 to catch undercover SVr4 binaries. Gutted. - */ - if (current->personality != PER_LINUX && current->exec_domain->handler) { - /* Hand it off to iBCS. The extra parameter and consequent type - * forcing is necessary because of the weird ARM calling convention. - */ - void (*handler)(int nr, struct pt_regs *regs) = (void *)current->exec_domain->handler; - (*handler)(n, regs); - return; - } - #ifdef CONFIG_DEBUG_USER - printk(KERN_ERR "[%d] %s: obsolete system call %08x.\n", - current->pid, current->comm, n); + /* + * experience shows that these seem to indicate that + * something catastrophic has happened + */ + printk("[%d] %s: arm syscall %d\n", current->pid, current->comm, no); dump_instr(regs); + if (user_mode(regs)) { + show_regs(regs); + c_backtrace(regs->ARM_fp, processor_mode(regs)); + } #endif - force_sig(SIGILL, current); - die_if_kernel("Oops", regs, n); + info.si_signo = SIGILL; + info.si_errno = 0; + info.si_code = ILL_ILLTRP; + info.si_addr = (void *)instruction_pointer(regs) - + (thumb_mode(regs) ? 2 : 4); + + force_sig_info(SIGILL, &info, current); + die_if_kernel("Oops", regs, no); + return 0; } void __bad_xchg(volatile void *ptr, int size) @@ -467,7 +546,7 @@ __trap_init((void *)vectors_base()); if (vectors_base() != 0) - printk("Relocating machine vectors to 0x%08x\n", + printk(KERN_DEBUG "Relocating machine vectors to 0x%08x\n", vectors_base()); #ifdef CONFIG_CPU_32 modify_domain(DOMAIN_USER, DOMAIN_CLIENT); |
From: James S. <jsi...@us...> - 2001-11-02 00:57:50
|
Update of /cvsroot/linuxconsole/ruby/linux/arch/arm In directory usw-pr-cvs1:/tmp/cvs-serv5606/linux/arch/arm Modified Files: config.in Log Message: Synced as much as possible to ARM tree. Index: config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/arch/arm/config.in,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- config.in 2001/07/29 18:24:12 1.18 +++ config.in 2001/11/02 00:57:43 1.19 @@ -11,7 +11,8 @@ define_bool CONFIG_UID16 y define_bool CONFIG_RWSEM_GENERIC_SPINLOCK y define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM n - +define_bool CONFIG_GENERIC_BUST_SPINLOCK n +define_bool CONFIG_GENERIC_ISA_DMA n mainmenu_option next_comment comment 'Code maturity level options' @@ -38,6 +39,7 @@ CLPS711x/EP721x-based CONFIG_ARCH_CLPS711X \ Co-EBSA285 CONFIG_ARCH_CO285 \ EBSA-110 CONFIG_ARCH_EBSA110 \ + Epxa10db CONFIG_ARCH_CAMELOT \ FootBridge CONFIG_ARCH_FOOTBRIDGE \ Integrator CONFIG_ARCH_INTEGRATOR \ LinkUp-L7200 CONFIG_ARCH_L7200 \ @@ -68,12 +70,22 @@ comment 'SA11x0 Implementations' dep_bool ' Assabet' CONFIG_SA1100_ASSABET $CONFIG_ARCH_SA1100 dep_bool ' Include support for Neponset' CONFIG_ASSABET_NEPONSET $CONFIG_SA1100_ASSABET +dep_bool ' ADS Bitsy' CONFIG_SA1100_ADSBITSY $CONFIG_ARCH_SA1100 dep_bool ' Brutus' CONFIG_SA1100_BRUTUS $CONFIG_ARCH_SA1100 dep_bool ' CerfBoard' CONFIG_SA1100_CERF $CONFIG_ARCH_SA1100 if [ "$CONFIG_SA1100_CERF" = "y" ]; then - bool ' 32MB Cerf support' CONFIG_SA1100_CERF_32MB + choice 'Cerf RAM available' \ + "8MB CONFIG_SA1100_CERF_8MB \ + 16MB CONFIG_SA1100_CERF_16MB \ + 32MB CONFIG_SA1100_CERF_32MB \ + 64MB CONFIG_SA1100_CERF_64MB" CerfRam + choice 'Cerf Flash available' \ + "8MB CONFIG_SA1100_CERF_FLASH_8MB \ + 16MB CONFIG_SA1100_CERF_FLASH_16MB \ + 32MB CONFIG_SA1100_CERF_FLASH_32MB" CerfFlash + bool 'Cerf w/CPLD support (CerfPDA)' CONFIG_SA1100_CERF_CPLD fi -dep_bool ' Compaq iPAQ H3600 (Bitsy)' CONFIG_SA1100_BITSY $CONFIG_ARCH_SA1100 +dep_bool ' Compaq iPAQ H3600' CONFIG_SA1100_H3600 $CONFIG_ARCH_SA1100 #dep_bool ' Empeg' CONFIG_SA1100_EMPEG $CONFIG_ARCH_SA1100 dep_bool ' Extenex HandHeld Theater (Squashtail)' CONFIG_SA1100_EXTENEX1 $CONFIG_ARCH_SA1100 if [ "$CONFIG_SA1100_EXTENEX1" = "y" ]; then @@ -82,6 +94,7 @@ dep_bool ' FlexaNet' CONFIG_SA1100_FLEXANET $CONFIG_ARCH_SA1100 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 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 @@ -101,14 +114,42 @@ if [ "$CONFIG_ASSABET_NEPONSET" = "y" -o \ "$CONFIG_SA1100_JORNADA720" = "y" -o \ "$CONFIG_SA1100_PFS168" = "y" -o \ - "$CONFIG_SA1100_XP860" = "y" ]; then + "$CONFIG_SA1100_XP860" = "y" -o \ + "$CONFIG_SA1100_GRAPHICSMASTER" = "y" -o \ + "$CONFIG_SA1100_ADSBITSY" = "y" ]; then define_bool CONFIG_SA1111 y + define_int CONFIG_FORCE_MAX_ZONEORDER 9 fi + +dep_tristate 'SA1100 USB function support' CONFIG_SA1100_USB $CONFIG_ARCH_SA1100 +dep_tristate ' Support for SA11x0 USB network link function' CONFIG_SA1100_USB_NETLINK $CONFIG_SA1100_USB +dep_tristate ' Support for SA11x0 USB character device emulation' CONFIG_SA110_USB_CHAR $CONFIG_SA1100_USB endmenu mainmenu_option next_comment comment 'CLPS711X/EP721X Implementations' +dep_bool ' CDB89712' CONFIG_ARCH_CDB89712 $CONFIG_ARCH_CLPS711X +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 + +# XXX Maybe these should indicate register compatibility +# instead of being mutually exclusive. +if [ "$CONFIG_ARCH_EDB7211" = "y" ]; then + define_bool CONFIG_ARCH_EP7211 y +else + define_bool CONFIG_ARCH_EP7211 n +fi +if [ "$CONFIG_ARCH_P720T" = "y" ]; then + define_bool CONFIG_ARCH_EP7212 y +else + define_bool CONFIG_ARCH_EP7212 n +fi + +if [ "$CONFIG_ARCH_EP7211" = "y" -o \ + "$CONFIG_ARCH_EP7212" = "y" ]; then + bool ' EP72xx ROM boot' CONFIG_EP72XX_ROM_BOOT +fi endmenu # Definitions to make life easier @@ -167,7 +208,8 @@ "$CONFIG_ARCH_TBOX" = "y" -o "$CONFIG_ARCH_SHARK" = "y" -o \ "$CONFIG_ARCH_NEXUSPCI" = "y" -o "$CONFIG_ARCH_CLPS711X" = "y" -o \ "$CONFIG_ARCH_INTEGRATOR" = "y" -o "$CONFIG_ARCH_SA1100" = "y" -o \ - "$CONFIG_ARCH_L7200" = "y" -o "$CONFIG_ARCH_ANAKIN" = "y" ]; then + "$CONFIG_ARCH_L7200" = "y" -o "$CONFIG_ARCH_ANAKIN" = "y" -o \ + "$CONFIG_ARCH_CAMELOT" = "y" ]; then define_bool CONFIG_CPU_32v4 y else define_bool CONFIG_CPU_32v4 n @@ -196,7 +238,9 @@ fi # ARM720T -if [ "$CONFIG_ARCH_CLPS711X" = "y" -o "$CONFIG_ARCH_L7200" = "y" ]; then +if [ "$CONFIG_ARCH_CLPS711X" = "y" -o \ + "$CONFIG_ARCH_L7200" = "y" -o \ + "$CONFIG_ARCH_CDB89712" = "y" ]; then define_bool CONFIG_CPU_ARM720T y else if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then @@ -221,19 +265,38 @@ fi fi +# ARM926T +if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then + bool 'Support ARM926T processor' CONFIG_CPU_ARM926T +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 -# bool 'Support ARM1020 processor' CONFIG_CPU_ARM1020 -#else +if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then + bool 'Support ARM1020 processor' CONFIG_CPU_ARM1020 +else define_bool CONFIG_CPU_ARM1020 n -#fi -#if [ "$CONFIG_CPU_ARM1020" = "y" ]; then -# bool ' ARM10 I-Cache on' CONFIG_CPU_ARM10_I_CACHE_ON -# bool ' ARM10 D-Cache on' CONFIG_CPU_ARM10_D_CACHE_ON -# if [ "$CONFIG_CPU_ARM10_D_CACHE_ON" = "y" ] ; then -# bool ' Force write through caches on ARM10' CONFIG_CPU_ARM10_FORCE_WRITE_THROUGH -# fi -#fi +fi +if [ "$CONFIG_CPU_ARM1020" = "y" ]; then + bool ' ARM10 I-Cache on' CONFIG_CPU_ARM10_I_CACHE_ON + bool ' ARM10 D-Cache on' CONFIG_CPU_ARM10_D_CACHE_ON + if [ "$CONFIG_CPU_ARM10_D_CACHE_ON" = "y" ] ; then + bool ' Force write through caches on ARM10' CONFIG_CPU_ARM10_FORCE_WRITE_THROUGH + fi +fi # SA110 if [ "$CONFIG_ARCH_EBSA110" = "y" -o "$CONFIG_FOOTBRIDGE" = "y" -o \ @@ -255,12 +318,13 @@ define_bool CONFIG_CPU_SA1100 n fi -#if [ "$CONFIG_CPU_32" = "y" ]; then -# bool 'Support Thumb instructions' CONFIG_ARM_THUMB -#fi +if [ "$CONFIG_CPU_32" = "y" ]; then + dep_bool 'Support Thumb instructions (experimental)' CONFIG_ARM_THUMB $CONFIG_EXPERIMENTAL +fi # Select various configuration options depending on the machine type -if [ "$CONFIG_ARCH_SA1100" = "y" ]; then +if [ "$CONFIG_ARCH_EDB7211" = "y" -o \ + "$CONFIG_ARCH_SA1100" = "y" ]; then define_bool CONFIG_DISCONTIGMEM y else define_bool CONFIG_DISCONTIGMEM n @@ -289,6 +353,8 @@ "$CONFIG_ARCH_SHARK" = "y" -o \ "$CONFIG_ARCH_CLPS7500" = "y" -o \ "$CONFIG_ARCH_EBSA110" = "y" -o \ + "$CONFIG_ARCH_CDB89712" = "y" -o \ + "$CONFIG_ARCH_EDB7211" = "y" -o \ "$CONFIG_ARCH_SA1100" = "y" ]; then define_bool CONFIG_ISA y else @@ -318,6 +384,7 @@ 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 choice 'Kernel core (/proc/kcore) format' \ @@ -335,6 +402,8 @@ "$CONFIG_ARCH_PERSONAL_SERVER" = "y" -o \ "$CONFIG_ARCH_CATS" = "y" -o \ "$CONFIG_ARCH_P720T" = "y" -o \ + "$CONFIG_ARCH_CDB89712" = "y" -o \ + "$CONFIG_ARCH_CAMELOT" = "y" -o \ "$CONFIG_ARCH_ANAKIN" = "y" ]; then string 'Default kernel command string' CONFIG_CMDLINE "" fi @@ -346,6 +415,7 @@ "$CONFIG_ARCH_CO285" = "y" -o \ "$CONFIG_ARCH_SA1100" = "y" -o \ "$CONFIG_ARCH_INTEGRATOR" = "y" -o \ + "$CONFIG_ARCH_CDB89712" = "y" -o \ "$CONFIG_ARCH_P720T" = "y" ]; then bool 'Timer and CPU usage LEDs' CONFIG_LEDS if [ "$CONFIG_LEDS" = "y" ]; then @@ -369,7 +439,6 @@ fi endmenu -source drivers/serial/Config.in source drivers/parport/Config.in if [ "$CONFIG_ALIGNMENT_TRAP" = "y" ]; then @@ -430,7 +499,7 @@ source drivers/ieee1394/Config.in -source drivers/i2o/Config.in +source drivers/message/i2o/Config.in mainmenu_option next_comment comment 'ISDN subsystem' @@ -441,12 +510,60 @@ fi endmenu -source drivers/usb/Config.in +# +# input before char - char/joystick depends on it. As does USB. +# source drivers/input/Config.in + source drivers/char/Config.in +if [ "$CONFIG_ARCH_ACORN" = "y" -a \ + "$CONFIG_BUSMOUSE" = "y" ]; then + if [ "$CONFIG_ARCH_RPC" != "y" ]; then + define_bool CONFIG_KBDMOUSE y + else + define_bool CONFIG_RPCMOUSE y + fi +fi + +source drivers/media/Config.in source fs/Config.in +if [ "$CONFIG_VT" = "y" ]; then + mainmenu_option next_comment + comment 'Console drivers' + # Select the keyboard type for this architecture. + if [ "$CONFIG_FOOTBRIDGE_HOST" = "y" -o \ + "$CONFIG_ARCH_CLPS7500" = "y" -o \ + "$CONFIG_ARCH_SHARK" = "y" ]; then + define_bool CONFIG_PC_KEYB y + fi + if [ "$CONFIG_ARCH_INTEGRATOR" = "y" ]; then + define_bool CONFIG_KMI_KEYB y + define_bool CONFIG_KMI_MOUSE y + fi + if [ "$CONFIG_ARCH_L7200" = "y" ]; then + define_bool CONFIG_L7200_KEYB y + fi + + # Do we use the PC-type keyboard map? + if [ "$CONFIG_FOOTBRIDGE_HOST" = "y" -o \ + "$CONFIG_ARCH_SHARK" = "y" -o \ + "$CONFIG_ARCH_SA1100" = "y" -o \ + "$CONFIG_ARCH_INTEGRATOR" = "y" -o \ + "$CONFIG_ARCH_TBOX" = "y" -o \ + "$CONFIG_ARCH_CLPS7500" = "y" -o \ + "$CONFIG_ARCH_P720T" = "y" -o \ + "$CONFIG_ARCH_ANAKIN" = "y" ]; then + define_bool CONFIG_PC_KEYMAP y + fi + if [ "$CONFIG_ARCH_ACORN" != "y" -a "$CONFIG_ARCH_EBSA110" != "y" ]; then + bool 'VGA text console' CONFIG_VGA_CONSOLE + fi + source drivers/video/Config.in + endmenu +fi + if [ "$CONFIG_ARCH_ACORN" = "y" -o \ "$CONFIG_ARCH_CLPS7500" = "y" -o \ "$CONFIG_ARCH_TBOX" = "y" -o \ @@ -463,8 +580,9 @@ endmenu fi -source drivers/media/Config.in -source drivers/video/Config.in +source drivers/misc/Config.in + +source drivers/usb/Config.in if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then source net/bluetooth/Config.in @@ -479,7 +597,9 @@ bool 'Verbose kernel error messages' CONFIG_DEBUG_ERRORS bool 'Verbose user fault messages' CONFIG_DEBUG_USER bool 'Include debugging information in kernel binary' CONFIG_DEBUG_INFO +bool 'Debug memory allocations' CONFIG_DEBUG_SLAB bool 'Magic SysRq key' CONFIG_MAGIC_SYSRQ +bool 'Spinlock debugging' CONFIG_DEBUG_SPINLOCK dep_bool 'Disable pgtable cache' CONFIG_NO_PGT_CACHE $CONFIG_CPU_26 # These options are only for real kernel hackers who want to get their hands dirty. dep_bool 'Kernel low-level debugging functions' CONFIG_DEBUG_LL $CONFIG_EXPERIMENTAL |
From: James S. <jsi...@us...> - 2001-11-02 00:57:49
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers In directory usw-pr-cvs1:/tmp/cvs-serv5606/linux/drivers Modified Files: Makefile Log Message: Synced as much as possible to ARM tree. Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/Makefile,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -r1.16 -r1.17 --- Makefile 2001/10/29 00:10:59 1.16 +++ Makefile 2001/11/02 00:57:43 1.17 @@ -8,9 +8,9 @@ mod-subdirs := dio mtd sbus macintosh usb input telephony sgi ide \ message/i2o message/fusion scsi md ieee1394 pnp isdn atm \ - fc4 net/hamradio i2c acpi bluetooth serial + fc4 net/hamradio i2c l3 acpi bluetooth serial -subdir-y := parport char block net sound misc media cdrom video +subdir-y := parport char block net sound misc media cdrom video hotplug subdir-m := $(subdir-y) @@ -43,6 +43,7 @@ # CONFIG_HAMRADIO can be set without CONFIG_NETDEVICE being set -- ch subdir-$(CONFIG_HAMRADIO) += net/hamradio subdir-$(CONFIG_I2C) += i2c +subdir-$(CONFIG_L3) += l3 subdir-$(CONFIG_ACPI) += acpi subdir-$(CONFIG_BLUEZ) += bluetooth |
From: James S. <jsi...@us...> - 2001-11-01 21:39:48
|
Update of /cvsroot/linuxconsole/ruby/linux/include/linux In directory usw-pr-cvs1:/tmp/cvs-serv19105 Modified Files: serial_core.h Log Message: Synced to Russell King's latest work. Index: serial_core.h =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/include/linux/serial_core.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- serial_core.h 2001/07/29 18:24:13 1.6 +++ serial_core.h 2001/11/01 21:39:45 1.7 @@ -46,6 +46,7 @@ #define PORT_AMBA 32 #define PORT_CLPS711X 33 #define PORT_SA1100 34 +#define PORT_UART00 35 #ifdef __KERNEL__ @@ -53,6 +54,7 @@ #include <linux/interrupt.h> #include <linux/circ_buf.h> #include <linux/serial.h> +#include <linux/spinlock.h> struct uart_port; struct uart_info; @@ -160,6 +162,7 @@ * stuff here. */ struct uart_info { + spinlock_t lock; struct uart_port *port; struct uart_ops *ops; struct uart_state *state; |
From: James S. <jsi...@us...> - 2001-11-01 21:39:02
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/serial In directory usw-pr-cvs1:/tmp/cvs-serv18924 Added Files: serial_anakin.c serial_uart00.c Log Message: Synced to Russell King's latest work. --- NEW FILE: serial_anakin.c --- /* * linux/drivers/char/serial_anakin.c * * Based on driver for AMBA serial ports, by ARM Limited, * Deep Blue Solutions Ltd., Linus Torvalds and Theodore Ts'o. * * Copyright (C) 2001 Aleph One Ltd. for Acunia N.V. * * Copyright (C) 2001 Blue Mug, Inc. 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: * 20-Apr-2001 TTC Created * 05-May-2001 W/TTC Updated for serial_core.c * 27-Jun-2001 jonm Minor changes; add mctrl support, switch to * SA_INTERRUPT. Works reliably now. No longer requires * changes to the serial_core API. * * $Id: serial_anakin.c,v 1.1 2001/11/01 21:38:58 jsimmons Exp $ */ #include <linux/config.h> #include <linux/module.h> #include <linux/errno.h> #include <linux/signal.h> #include <linux/sched.h> #include <linux/interrupt.h> #include <linux/tty.h> #include <linux/tty_flip.h> #include <linux/major.h> #include <linux/string.h> #include <linux/fcntl.h> #include <linux/ptrace.h> #include <linux/ioport.h> #include <linux/mm.h> #include <linux/slab.h> #include <linux/init.h> #include <linux/circ_buf.h> #include <linux/serial.h> #include <linux/console.h> #include <linux/sysrq.h> #include <asm/system.h> #include <asm/io.h> #include <asm/irq.h> #include <asm/uaccess.h> #include <asm/bitops.h> #include <linux/serial_core.h> #include <asm/arch/serial_reg.h> #define UART_NR 5 #define SERIAL_ANAKIN_NAME "ttyAN" #define SERIAL_ANAKIN_MAJOR 204 #define SERIAL_ANAKIN_MINOR 32 #define CALLOUT_ANAKIN_NAME "cuaan" #define CALLOUT_ANAKIN_MAJOR 205 #define CALLOUT_ANAKIN_MINOR 32 static struct tty_driver normal, callout; static struct tty_struct *anakin_table[UART_NR]; static struct termios *anakin_termios[UART_NR], *anakin_termios_locked[UART_NR]; static struct uart_state anakin_state[UART_NR]; static u_int txenable[NR_IRQS]; /* Software interrupt register */ static inline unsigned int anakin_in(struct uart_port *port, u_int offset) { return __raw_readl(port->base + offset); } static inline void anakin_out(struct uart_port *port, u_int offset, unsigned int value) { __raw_writel(value, port->base + offset); } static void anakin_stop_tx(struct uart_port *port, u_int from_tty) { txenable[port->irq] = 0; } static inline void anakin_transmit_buffer(struct uart_info *info) { struct uart_port *port = info->port; while (!(anakin_in(port, 0x10) & TXEMPTY)); anakin_out(port, 0x14, info->xmit.buf[info->xmit.tail]); anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST); info->xmit.tail = (info->xmit.tail + 1) & (UART_XMIT_SIZE-1); info->state->icount.tx++; if (info->xmit.head == info->xmit.tail) anakin_stop_tx(port, 0); } static inline void anakin_transmit_x_char(struct uart_info *info) { struct uart_port *port = info->port; anakin_out(port, 0x14, info->x_char); anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST); info->state->icount.tx++; info->x_char = 0; } static void anakin_start_tx(struct uart_port *port, u_int nonempty, u_int from_tty) { unsigned int flags; save_flags_cli(flags); // is it this... or below: if (nonempty if (!txenable[port->irq]) { txenable[port->irq] = TXENABLE; if ((anakin_in(port, 0x10) & TXEMPTY) && nonempty) { anakin_transmit_buffer((struct uart_info*)port->unused); } } restore_flags(flags); } static void anakin_stop_rx(struct uart_port *port) { unsigned long flags; save_flags_cli(flags); while (anakin_in(port, 0x10) & RXRELEASE) anakin_in(port, 0x14); anakin_out(port, 0x18, anakin_in(port, 0x18) | BLOCKRX); restore_flags(flags); } static void anakin_enable_ms(struct uart_port *port) { } static inline void anakin_rx_chars(struct uart_info *info) { unsigned int ch; struct tty_struct *tty = info->tty; if (!(anakin_in(info->port, 0x10) & RXRELEASE)) return; ch = anakin_in(info->port, 0x14) & 0xff; if (tty->flip.count < TTY_FLIPBUF_SIZE) { *tty->flip.char_buf_ptr++ = ch; *tty->flip.flag_buf_ptr++ = TTY_NORMAL; info->state->icount.rx++; tty->flip.count++; } tty_flip_buffer_push(tty); } static inline void anakin_overrun_chars(struct uart_info *info) { unsigned int ch; ch = anakin_in(info->port, 0x14); info->state->icount.overrun++; } static inline void anakin_tx_chars(struct uart_info *info) { if (info->x_char) { anakin_transmit_x_char(info); return; } if (info->xmit.head == info->xmit.tail || info->tty->stopped || info->tty->hw_stopped) { anakin_stop_tx(info->port, 0); return; } anakin_transmit_buffer(info); if (CIRC_CNT(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE) < WAKEUP_CHARS) uart_event(info, EVT_WRITE_WAKEUP); } static void anakin_int(int irq, void *dev_id, struct pt_regs *regs) { unsigned int status; struct uart_info *info = dev_id; status = anakin_in(info->port, 0x1c); if (status & RX) anakin_rx_chars(info); if (status & OVERRUN) anakin_overrun_chars(info); if (txenable[info->port->irq] && (status & TX)) anakin_tx_chars(info); } static u_int anakin_tx_empty(struct uart_port *port) { return anakin_in(port, 0x10) & TXEMPTY ? TIOCSER_TEMT : 0; } static int anakin_get_mctrl(struct uart_port *port) { unsigned int status = 0; status |= (anakin_in(port, 0x10) & CTS ? TIOCM_CTS : 0); status |= (anakin_in(port, 0x18) & DCD ? TIOCM_CAR : 0); status |= (anakin_in(port, 0x18) & DTR ? TIOCM_DTR : 0); status |= (anakin_in(port, 0x18) & RTS ? TIOCM_RTS : 0); return status; } static void anakin_set_mctrl(struct uart_port *port, u_int mctrl) { unsigned int status; status = anakin_in(port, 0x18); if (mctrl & TIOCM_RTS) status |= RTS; else status &= ~RTS; if (mctrl & TIOCM_CAR) status |= DCD; else status &= ~DCD; anakin_out(port, 0x18, status); } static void anakin_break_ctl(struct uart_port *port, int break_state) { unsigned int status; status = anakin_in(port, 0x20); if (break_state == -1) status |= SETBREAK; else status &= ~SETBREAK; anakin_out(port, 0x20, status); } static int anakin_startup(struct uart_port *port, struct uart_info *info) { int retval; unsigned int read,write; /* * Allocate the IRQ */ retval = request_irq(port->irq, anakin_int, SA_INTERRUPT, "serial_anakin", info); if (retval) return retval; port->ops->set_mctrl(port, info->mctrl); /* * initialise the old status of the modem signals */ port->old_status = 0; /* * Finally, disable IRQ and softIRQs for first byte) */ txenable[port->irq] = 0; read = anakin_in(port, 0x18); write = (read & ~(RTS | DTR | BLOCKRX)) | IRQENABLE; anakin_out(port, 0x18, write); /* Store the uart_info pointer so we can reference it in * anakin_start_tx() */ port->unused = (u_int)info; return 0; } static void anakin_shutdown(struct uart_port *port, struct uart_info *info) { /* * Free the interrupt */ free_irq(port->irq, info); /* * disable all interrupts, disable the port */ anakin_out(port, 0x18, anakin_in(port, 0x18) & ~IRQENABLE); } static void anakin_change_speed(struct uart_port *port, u_int cflag, u_int iflag, u_int quot) { unsigned int flags; save_flags_cli(flags); while (!(anakin_in(port, 0x10) & TXEMPTY)); anakin_out(port, 0x10, (anakin_in(port, 0x10) & ~PRESCALER) | (quot << 3)); //parity always set to none anakin_out(port, 0x18, anakin_in(port, 0x18) & ~PARITY); restore_flags(flags); } static struct uart_ops anakin_pops = { tx_empty: anakin_tx_empty, set_mctrl: anakin_set_mctrl, get_mctrl: anakin_get_mctrl, stop_tx: anakin_stop_tx, start_tx: anakin_start_tx, stop_rx: anakin_stop_rx, enable_ms: anakin_enable_ms, break_ctl: anakin_break_ctl, startup: anakin_startup, shutdown: anakin_shutdown, change_speed: anakin_change_speed, }; static struct uart_port anakin_ports[UART_NR] = { { base: IO_BASE + UART0, irq: IRQ_UART0, uartclk: 3686400, fifosize: 0, ops: &anakin_pops, }, { base: IO_BASE + UART1, irq: IRQ_UART1, uartclk: 3686400, fifosize: 0, ops: &anakin_pops, }, { base: IO_BASE + UART2, irq: IRQ_UART2, uartclk: 3686400, fifosize: 0, ops: &anakin_pops, }, { base: IO_BASE + UART3, irq: IRQ_UART3, uartclk: 3686400, fifosize: 0, ops: &anakin_pops, }, { base: IO_BASE + UART4, irq: IRQ_UART4, uartclk: 3686400, fifosize: 0, ops: &anakin_pops, }, }; #ifdef CONFIG_SERIAL_ANAKIN_CONSOLE static void anakin_console_write(struct console *co, const char *s, u_int count) { struct uart_port *port = anakin_ports + co->index; unsigned int flags, status, i; /* * First save the status then disable the interrupts */ save_flags_cli(flags); status = anakin_in(port, 0x18); anakin_out(port, 0x18, status & ~IRQENABLE); restore_flags(flags); /* * Now, do each character */ for (i = 0; i < count; i++, s++) { while (!(anakin_in(port, 0x10) & TXEMPTY)); /* * Send the character out. * If a LF, also do CR... */ anakin_out(port, 0x14, *s); anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST); if (*s == 10) { while (!(anakin_in(port, 0x10) & TXEMPTY)); anakin_out(port, 0x14, 13); anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST); } } /* * Finally, wait for transmitter to become empty * and restore the interrupts */ while (!(anakin_in(port, 0x10) & TXEMPTY)); if (status & IRQENABLE) save_flags_cli(flags); anakin_out(port, 0x18, anakin_in(port, 0x18) | IRQENABLE); restore_flags(flags); } static kdev_t anakin_console_device(struct console *co) { return MKDEV(SERIAL_ANAKIN_MAJOR, SERIAL_ANAKIN_MINOR + co->index); } static int anakin_console_wait_key(struct console *co) { struct uart_port *port = anakin_ports + co->index; unsigned int flags, status, ch; save_flags_cli(flags); status = anakin_in(port, 0x18); anakin_out(port, 0x18, status & ~IRQENABLE); restore_flags(flags); while (!(anakin_in(port, 0x10) & RXRELEASE)); ch = anakin_in(port, 0x14); if (status & IRQENABLE) { save_flags_cli(flags); anakin_out(port, 0x18, anakin_in(port, 0x18) | IRQENABLE); restore_flags(flags); } return ch; } /* * Read the current UART setup. */ static void __init anakin_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits) { int paritycode; *baud = GETBAUD (anakin_in(port, 0x10) & PRESCALER); paritycode = GETPARITY(anakin_in(port, 0x18) & PARITY); switch (paritycode) { case NONEPARITY: *parity = 'n'; break; case ODDPARITY: *parity = 'o'; break; case EVENPARITY: *parity = 'e'; break; } *bits = 8; } static int __init anakin_console_setup(struct console *co, char *options) { struct uart_port *port; int baud = CONFIG_ANAKIN_DEFAULT_BAUDRATE; int bits = 8; int parity = 'n'; /* * Check whether an invalid uart number has been specified, and * if so, search for the first available port that does have * console support. */ port = uart_get_console(anakin_ports, UART_NR, co); if (options) uart_parse_options(options, &baud, &parity, &bits); else anakin_console_get_options(port, &baud, &parity, &bits); return uart_set_options(port, co, baud, parity, bits); } static struct console anakin_console = { name: SERIAL_ANAKIN_NAME, write: anakin_console_write, device: anakin_console_device, wait_key: anakin_console_wait_key, setup: anakin_console_setup, flags: CON_PRINTBUFFER, index: -1, }; void __init anakin_console_init(void) { register_console(&anakin_console); } #define ANAKIN_CONSOLE &anakin_console #else #define ANAKIN_CONSOLE NULL #endif static struct uart_register anakin_reg = { normal_major: SERIAL_ANAKIN_MAJOR, normal_name: SERIAL_ANAKIN_NAME, normal_driver: &normal, callout_major: CALLOUT_ANAKIN_MAJOR, callout_name: CALLOUT_ANAKIN_NAME, callout_driver: &callout, table: anakin_table, termios: anakin_termios, termios_locked: anakin_termios_locked, minor: SERIAL_ANAKIN_MINOR, nr: UART_NR, state: anakin_state, port: anakin_ports, cons: ANAKIN_CONSOLE, }; static int __init anakin_init(void) { return uart_register_port(&anakin_reg); } __initcall(anakin_init); MODULE_DESCRIPTION("Anakin serial driver"); MODULE_AUTHOR("Tak-Shing Chan <ch...@al...>"); MODULE_SUPPORTED_DEVICE("ttyAN"); MODULE_LICENSE("GPL"); EXPORT_NO_SYMBOLS; --- NEW FILE: serial_uart00.c --- /* * linux/drivers/char/serial_uart00.c * * Driver for UART00 serial ports * * Based on drivers/char/serial_amba.c, by ARM Limited & * Deep Blue Solutions Ltd. * Copyright 2001 Altera Corporation * * 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 * * $Id: serial_uart00.c,v 1.1 2001/11/01 21:38:58 jsimmons Exp $ * * This is a generic driver for ARM UART00-type serial ports. They * have a lot of 16550-like features, but are not register compatable. * Note that although they do have CTS, DCD and DSR inputs, they do * not have an RI input, nor do they have DTR or RTS outputs. If * required, these have to be supplied via some other means (eg, GPIO) * and hooked into this driver. */ #include <linux/config.h> #include <linux/module.h> #include <linux/errno.h> #include <linux/signal.h> #include <linux/sched.h> #include <linux/interrupt.h> #include <linux/tty.h> #include <linux/tty_flip.h> #include <linux/major.h> #include <linux/string.h> #include <linux/fcntl.h> #include <linux/ptrace.h> #include <linux/ioport.h> #include <linux/mm.h> #include <linux/slab.h> #include <linux/init.h> #include <linux/circ_buf.h> #include <linux/serial.h> #include <linux/console.h> #include <linux/sysrq.h> #include <asm/system.h> #include <asm/io.h> #include <asm/irq.h> #include <asm/uaccess.h> #include <asm/bitops.h> #if defined(CONFIG_SERIAL_UART00_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) #define SUPPORT_SYSRQ #endif #include <linux/serial_core.h> #include <asm/arch/excalibur.h> #define UART00_TYPE (volatile unsigned int*) #include <asm/arch/uart00.h> #include <asm/arch/int_ctrl00.h> #define UART_NR 2 #define SERIAL_UART00_NAME "ttyUA" #define SERIAL_UART00_MAJOR 204 #define SERIAL_UART00_MINOR 16 /* Temporary - will change in future */ #define SERIAL_UART00_NR UART_NR #define UART_PORT_SIZE 0x50 #define CALLOUT_UART00_NAME "cuaua" #define CALLOUT_UART00_MAJOR 205 #define CALLOUT_UART00_MINOR 16 /* Temporary - will change in future */ #define CALLOUT_UART00_NR UART_NR static struct tty_driver normal, callout; static struct tty_struct *uart00_table[UART_NR]; static struct termios *uart00_termios[UART_NR], *uart00_termios_locked[UART_NR]; //static struct uart_state uart00_state[UART_NR]; static struct console uart00_console; #define UART00_ISR_PASS_LIMIT 256 /* * Access macros for the UART00 UARTs */ #define UART_GET_INT_STATUS(p) inl(UART_ISR((p)->membase)) #define UART_PUT_IES(p, c) outl(c,UART_IES((p)->membase)) #define UART_GET_IES(p) inl(UART_IES((p)->membase)) #define UART_PUT_IEC(p, c) outl(c,UART_IEC((p)->membase)) #define UART_GET_IEC(p) inl(UART_IEC((p)->membase)) #define UART_PUT_CHAR(p, c) outl(c,UART_TD((p)->membase)) #define UART_GET_CHAR(p) inl(UART_RD((p)->membase)) #define UART_GET_RSR(p) inl(UART_RSR((p)->membase)) #define UART_GET_RDS(p) inl(UART_RDS((p)->membase)) #define UART_GET_MSR(p) inl(UART_MSR((p)->membase)) #define UART_GET_MCR(p) inl(UART_MCR((p)->membase)) #define UART_PUT_MCR(p, c) outl(c,UART_MCR((p)->membase)) #define UART_GET_MC(p) inl(UART_MC((p)->membase)) #define UART_PUT_MC(p, c) outl(c,UART_MC((p)->membase)) #define UART_GET_TSR(p) inl(UART_TSR((p)->membase)) #define UART_GET_DIV_HI(p) inl(UART_DIV_HI((p)->membase)) #define UART_PUT_DIV_HI(p,c) outl(c,UART_DIV_HI((p)->membase)) #define UART_GET_DIV_LO(p) inl(UART_DIV_LO((p)->membase)) #define UART_PUT_DIV_LO(p,c) outl(c,UART_DIV_LO((p)->membase)) #define UART_RX_DATA(s) ((s) & UART_RSR_RX_LEVEL_MSK) #define UART_TX_READY(s) (((s) & UART_TSR_TX_LEVEL_MSK) < 15) //#define UART_TX_EMPTY(p) ((UART_GET_FR(p) & UART00_UARTFR_TMSK) == 0) static void uart00_stop_tx(struct uart_port *port, u_int from_tty) { UART_PUT_IEC(port, UART_IEC_TIE_MSK); } static void uart00_stop_rx(struct uart_port *port) { UART_PUT_IEC(port, UART_IEC_RE_MSK); } static void uart00_enable_ms(struct uart_port *port) { UART_PUT_IES(port, UART_IES_ME_MSK); } static void uart00_rx_chars(struct uart_info *info, struct pt_regs *regs) { struct tty_struct *tty = info->tty; unsigned int status, ch, rds, flg, ignored = 0; struct uart_port *port = info->port; status = UART_GET_RSR(port); while (UART_RX_DATA(status)) { /* * We need to read rds before reading the * character from the fifo */ rds = UART_GET_RDS(port); ch = UART_GET_CHAR(port); port->icount.rx++; if (tty->flip.count >= TTY_FLIPBUF_SIZE) goto ignore_char; flg = TTY_NORMAL; /* * Note that the error handling code is * out of the main execution path */ if (rds & (UART_RDS_BI_MSK |UART_RDS_FE_MSK| UART_RDS_PE_MSK |UART_RDS_PE_MSK)) goto handle_error; if (uart_handle_sysrq_char(info, ch, regs)) goto ignore_char; error_return: *tty->flip.flag_buf_ptr++ = flg; *tty->flip.char_buf_ptr++ = ch; tty->flip.count++; ignore_char: status = UART_GET_RSR(port); } out: tty_flip_buffer_push(tty); return; handle_error: if (rds & UART_RDS_BI_MSK) { status &= ~(UART_RDS_FE_MSK | UART_RDS_PE_MSK); port->icount.brk++; #ifdef SUPPORT_SYSRQ if (uart_handle_break(info, &uart00_console)) goto ignore_char; #endif } else if (rds & UART_RDS_PE_MSK) port->icount.parity++; else if (rds & UART_RDS_PE_MSK) port->icount.frame++; if (rds & UART_RDS_OE_MSK) port->icount.overrun++; if (rds & port->ignore_status_mask) { if (++ignored > 100) goto out; goto ignore_char; } rds &= port->read_status_mask; if (rds & UART_RDS_BI_MSK) flg = TTY_BREAK; else if (rds & UART_RDS_PE_MSK) flg = TTY_PARITY; else if (rds & UART_RDS_FE_MSK) flg = TTY_FRAME; if (status & UART_RDS_OE_MSK) { /* * CHECK: does overrun affect the current character? * ASSUMPTION: it does not. */ *tty->flip.flag_buf_ptr++ = flg; *tty->flip.char_buf_ptr++ = ch; tty->flip.count++; if (tty->flip.count >= TTY_FLIPBUF_SIZE) goto ignore_char; ch = 0; flg = TTY_OVERRUN; } #ifdef SUPPORT_SYSRQ info->sysrq = 0; #endif goto error_return; } static void uart00_tx_chars(struct uart_info *info) { int count; struct uart_port *port=info->port; if (port->x_char) { while((UART_GET_TSR(port)& UART_TSR_TX_LEVEL_MSK)==15); UART_PUT_CHAR(port, port->x_char); port->icount.tx++; port->x_char = 0; return; } if (info->xmit.head == info->xmit.tail || info->tty->stopped || info->tty->hw_stopped) { uart00_stop_tx(info->port, 0); return; } count = port->fifosize >> 1; do { while((UART_GET_TSR(port)& UART_TSR_TX_LEVEL_MSK)==15); UART_PUT_CHAR(port, info->xmit.buf[info->xmit.tail]); info->xmit.tail = (info->xmit.tail + 1) & (UART_XMIT_SIZE - 1); port->icount.tx++; if (info->xmit.head == info->xmit.tail) break; } while (--count > 0); if (CIRC_CNT(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE) < WAKEUP_CHARS) uart_event(info, EVT_WRITE_WAKEUP); if (info->xmit.head == info->xmit.tail) uart00_stop_tx(info->port, 0); } static void uart00_start_tx(struct uart_port *port, u_int nonempty, u_int from_tty) { struct uart_info *info=(struct uart_info*)(port->iobase); if (nonempty) { UART_PUT_IES(port,UART_IES_TIE_MSK ); uart00_tx_chars(info); } } static void uart00_modem_status(struct uart_info *info) { unsigned int status; struct uart_icount *icount = &info->port->icount; status = UART_GET_MSR(info->port); if (!status & (UART_MSR_DCTS_MSK | UART_MSR_DDSR_MSK | UART_MSR_TERI_MSK | UART_MSR_DDCD_MSK)) return; if (status & UART_MSR_DDCD_MSK) { icount->dcd++; #ifdef CONFIG_HARD_PPS if ((info->flags & ASYNC_HARDPPS_CD) && (status & UART_MSR_DCD_MSK)) hardpps(); #endif if (info->flags & ASYNC_CHECK_CD) { if (status & UART_MSR_DCD_MSK) wake_up_interruptible(&info->open_wait); else if (!((info->flags & ASYNC_CALLOUT_ACTIVE) && (info->flags & ASYNC_CALLOUT_NOHUP))) { if (info->tty) tty_hangup(info->tty); } } } if (status & UART_MSR_DDSR_MSK) icount->dsr++; if (status & UART_MSR_DCTS_MSK) { icount->cts++; if (info->flags & ASYNC_CTS_FLOW) { status &= UART_MSR_CTS_MSK; if (info->tty->hw_stopped) { if (status) { info->tty->hw_stopped = 0; info->ops->start_tx(info->port, 1, 0); uart_event(info, EVT_WRITE_WAKEUP); } } else { if (!status) { info->tty->hw_stopped = 1; info->ops->stop_tx(info->port, 0); } } } } wake_up_interruptible(&info->delta_msr_wait); } static void uart00_int(int irq, void *dev_id, struct pt_regs *regs) { struct uart_info *info = dev_id; unsigned int status, pass_counter = 0; status = UART_GET_INT_STATUS(info->port); do { if (status & UART_ISR_RI_MSK) uart00_rx_chars(info, regs); if (status & (UART_ISR_TI_MSK | UART_ISR_TII_MSK)) uart00_tx_chars(info); if (status & UART_ISR_MI_MSK) uart00_modem_status(info); if (pass_counter++ > UART00_ISR_PASS_LIMIT) break; status = UART_GET_INT_STATUS(info->port); } while (status); } static u_int uart00_tx_empty(struct uart_port *port) { return UART_GET_TSR(port) & UART_TSR_TX_LEVEL_MSK? 0 : TIOCSER_TEMT; } static int uart00_get_mctrl(struct uart_port *port) { unsigned int result = 0; unsigned int status; status = UART_GET_MSR(port); if (status & UART_MSR_DCD_MSK) result |= TIOCM_CAR; if (status & UART_MSR_DSR_MSK) result |= TIOCM_DSR; if (status & UART_MSR_CTS_MSK) result |= TIOCM_CTS; if (status & UART_MSR_RI_MSK) result |= TIOCM_RI; return result; } static void uart00_set_mctrl_null(struct uart_port *port, u_int mctrl) { } static void uart00_break_ctl(struct uart_port *port, int break_state) { unsigned int mcr; mcr = UART_GET_MCR(port); if (break_state == -1) mcr |= UART_MCR_BR_MSK; else mcr &= ~UART_MCR_BR_MSK; UART_PUT_MCR(port, mcr); } static inline u_int uart_calculate_quot(struct uart_info *info, u_int baud) { u_int quot; /* Special case: B0 rate */ if (!baud) baud = 9600; quot = (info->port->uartclk / (16 * baud)-1) ; return quot; } static void uart00_change_speed(struct uart_port *port, u_int cflag, u_int iflag, u_int quot) { u_int uart_mc=0, old_ies; unsigned long flags; #if DEBUG printk("uart00_set_cflag(0x%x) called\n", cflag); #endif /* byte size and parity */ switch (cflag & CSIZE) { case CS5: uart_mc = UART_MC_CLS_CHARLEN_5; break; case CS6: uart_mc = UART_MC_CLS_CHARLEN_6; break; case CS7: uart_mc = UART_MC_CLS_CHARLEN_7; break; default: uart_mc = UART_MC_CLS_CHARLEN_8; break; // CS8 } if (cflag & CSTOPB) uart_mc|= UART_MC_ST_TWO; if (cflag & PARENB) { uart_mc |= UART_MC_PE_MSK; if (!(cflag & PARODD)) uart_mc |= UART_MC_EP_MSK; } port->read_status_mask = UART_RDS_OE_MSK; if (iflag & INPCK) port->read_status_mask |= UART_RDS_FE_MSK | UART_RDS_PE_MSK; if (iflag & (BRKINT | PARMRK)) port->read_status_mask |= UART_RDS_BI_MSK; /* * Characters to ignore */ port->ignore_status_mask = 0; if (iflag & IGNPAR) port->ignore_status_mask |= UART_RDS_FE_MSK | UART_RDS_PE_MSK; if (iflag & IGNBRK) { port->ignore_status_mask |= UART_RDS_BI_MSK; /* * If we're ignoring parity and break indicators, * ignore overruns to (for real raw support). */ if (iflag & IGNPAR) port->ignore_status_mask |= UART_RDS_OE_MSK; } /* first, disable everything */ save_flags(flags); cli(); old_ies = UART_GET_IES(port); if ((port->flags & ASYNC_HARDPPS_CD) || (cflag & CRTSCTS) || !(cflag & CLOCAL)) old_ies |= UART_IES_ME_MSK; /* Set baud rate */ quot+=1; /* Correction for generic quotient calculation */ UART_PUT_DIV_LO(port, (quot & 0xff)); UART_PUT_DIV_HI(port, ((quot & 0xf00) >> 8)); UART_PUT_MC(port, uart_mc); UART_PUT_IES(port, old_ies); restore_flags(flags); } static int uart00_startup(struct uart_port *port, struct uart_info *info) { int retval; int quot; /* * Allocate the IRQ */ retval = request_irq(port->irq, uart00_int, 0, "uart00", info); if (retval) return retval; port->ops->set_mctrl(port, info->mctrl); quot=uart_calculate_quot(info,38400); uart00_change_speed(port,CS8,IGNPAR,quot); /* * Use iobase to store a pointer to info. We need this to start a * transmission as the tranmittr interrupt is only generated on * the transition to the idle state */ port->iobase=(u_int)info; /* * Finally, enable interrupts. Use the TII interrupt to minimise * the number of interrupts generated. If higher performance is * needed, consider using the TI interrupt with a suitable FIFO * threshold */ UART_PUT_IES(port, UART_IES_RE_MSK | UART_IES_TIE_MSK); return 0; } static void uart00_shutdown(struct uart_port *port, struct uart_info *info) { /* * Free the interrupt */ free_irq(port->irq, info); /* * disable all interrupts, disable the port */ UART_PUT_IEC(port, 0xff); /* disable break condition and fifos */ UART_PUT_MCR(port, UART_GET_MCR(port) &~UART_MCR_BR_MSK); } /* * Release the memory region(s) being used by 'port' */ static void uart00_release_port(struct uart_port *port) { release_mem_region(port->mapbase, UART_PORT_SIZE); } /* * Request the memory region(s) being used by 'port' */ static int uart00_request_port(struct uart_port *port) { return request_mem_region(port->mapbase, UART_PORT_SIZE, "serial_uart00") != NULL ? 0 : -EBUSY; } /* * Configure/autoconfigure the port. */ static void uart00_config_port(struct uart_port *port, int flags) { if (flags & UART_CONFIG_TYPE) { port->type = PORT_UART00; uart00_request_port(port); } } /* * verify the new serial_struct (for TIOCSSERIAL). */ static int uart00_verify_port(struct uart_port *port, struct serial_struct *ser) { int ret = 0; if (ser->type != PORT_UNKNOWN && ser->type != PORT_UART00) ret = -EINVAL; if (ser->irq < 0 || ser->irq >= NR_IRQS) ret = -EINVAL; if (ser->baud_base < 9600) ret = -EINVAL; return ret; } static struct uart_ops uart00_pops = { tx_empty: uart00_tx_empty, set_mctrl: uart00_set_mctrl_null, get_mctrl: uart00_get_mctrl, stop_tx: uart00_stop_tx, start_tx: uart00_start_tx, stop_rx: uart00_stop_rx, enable_ms: uart00_enable_ms, break_ctl: uart00_break_ctl, startup: uart00_startup, shutdown: uart00_shutdown, change_speed: uart00_change_speed, release_port: uart00_release_port, request_port: uart00_request_port, config_port: uart00_config_port, verify_port: uart00_verify_port, }; static struct uart_port uart00_ports[UART_NR] = { { membase: (void*)IO_ADDRESS(EXC_UART00_BASE), mapbase: EXC_UART00_BASE, irq: IRQ_UART, uartclk: EXC_AHB2_CLK_FREQUENCY, fifosize: 16, ops: &uart00_pops, flags: ASYNC_BOOT_AUTOCONF, }, { membase: (void*)IO_ADDRESS(EXC_PLD_BLOCK0_BASE + 0x280), mapbase: EXC_PLD_BLOCK0_BASE, irq: 0, uartclk: 32768000, fifosize: 16, ops: &uart00_pops, }, }; #ifdef CONFIG_SERIAL_UART00_CONSOLE #ifdef used_and_not_const_char_pointer static int uart00_console_read(struct uart_port *port, char *s, u_int count) { unsigned int status; int c; #if DEBUG printk("uart00_console_read() called\n"); #endif c = 0; while (c < count) { status = UART_GET_RSR(port); if (UART_RX_DATA(status)) { *s++ = UART_GET_CHAR(port); c++; } else { // nothing more to get, return return c; } } // return the count return c; } #endif static void uart00_console_write(struct console *co, const char *s, unsigned count) { struct uart_port *port = uart00_ports + co->index; unsigned int status, old_ies; int i; /* * First save the CR then disable the interrupts */ old_ies = UART_GET_IES(port); UART_PUT_IEC(port,0xff); /* * Now, do each character */ for (i = 0; i < count; i++) { do { status = UART_GET_TSR(port); } while (!UART_TX_READY(status)); UART_PUT_CHAR(port, s[i]); if (s[i] == '\n') { do { status = UART_GET_TSR(port); } while (!UART_TX_READY(status)); UART_PUT_CHAR(port, '\r'); } } /* * Finally, wait for transmitter to become empty * and restore the IES */ do { status = UART_GET_TSR(port); } while (status & UART_TSR_TX_LEVEL_MSK); UART_PUT_IES(port, old_ies); } static kdev_t uart00_console_device(struct console *co) { return MKDEV(SERIAL_UART00_MAJOR, SERIAL_UART00_MINOR + co->index); } static int uart00_console_wait_key(struct console *co) { struct uart_port *port = uart00_ports + co->index; unsigned int status; do { status = UART_GET_RSR(port); } while (!UART_RX_DATA(status)); return UART_GET_CHAR(port); } static void /*__init*/ uart00_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits) { u_int uart_mc, quot; uart_mc= UART_GET_MC(port); *parity = 'n'; if (uart_mc & UART_MC_PE_MSK) { if (uart_mc & UART_MC_EP_MSK) *parity = 'e'; else *parity = 'o'; } switch (uart_mc & UART_MC_CLS_MSK){ case UART_MC_CLS_CHARLEN_5: *bits = 5; break; case UART_MC_CLS_CHARLEN_6: *bits = 6; break; case UART_MC_CLS_CHARLEN_7: *bits = 7; break; case UART_MC_CLS_CHARLEN_8: *bits = 8; break; } quot = UART_GET_DIV_LO(port) | (UART_GET_DIV_HI(port) << 8); *baud = port->uartclk / (16 *quot ); } static int __init uart00_console_setup(struct console *co, char *options) { struct uart_port *port; int baud = 38400; int bits = 8; int parity = 'n'; int flow= 'n'; /* * Check whether an invalid uart number has been specified, and * if so, search for the first available port that does have * console support. */ port = uart_get_console(uart00_ports, UART_NR, co); if (options) uart_parse_options(options, &baud, &parity, &bits, &flow); else uart00_console_get_options(port, &baud, &parity, &bits); return uart_set_options(port, co, baud, parity, bits, flow); } static struct console uart00_console = { name: SERIAL_UART00_NAME, write: uart00_console_write, #ifdef used_and_not_const_char_pointer read: uart00_console_read, #endif device: uart00_console_device, wait_key: uart00_console_wait_key, setup: uart00_console_setup, flags: CON_PRINTBUFFER, index: 0, }; void __init uart00_console_init(void) { register_console(&uart00_console); } #define UART00_CONSOLE &uart00_console #else #define UART00_CONSOLE NULL #endif static struct uart_driver uart00_reg = { owner: NULL, normal_major: SERIAL_UART00_MAJOR, normal_name: SERIAL_UART00_NAME, normal_driver: &normal, callout_major: CALLOUT_UART00_MAJOR, callout_name: CALLOUT_UART00_NAME, callout_driver: &callout, table: uart00_table, termios: uart00_termios, termios_locked: uart00_termios_locked, minor: SERIAL_UART00_MINOR, nr: UART_NR, state: NULL, port: uart00_ports, cons: UART00_CONSOLE, }; static int __init uart00_init(void) { printk(KERN_WARNING "serial_uart00:Using temporary major/minor pairs - these WILL change in the future\n"); return uart_register_driver(&uart00_reg); } __initcall(uart00_init); |
From: James S. <jsi...@us...> - 2001-11-01 21:38:39
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/serial In directory usw-pr-cvs1:/tmp/cvs-serv18808 Modified Files: Config.in Makefile serial_21285.c serial_8250.c serial_8250_pci.c serial_8250_pnp.c serial_amba.c serial_clps711x.c serial_core.c serial_sa1100.c Log Message: Synced to Russell King's latest work. Index: Config.in =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/Config.in,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- Config.in 2001/08/23 02:46:17 1.6 +++ Config.in 2001/11/01 21:38:35 1.7 @@ -28,6 +28,9 @@ dep_bool ' Use /dev/ttyS0 device (OBSOLETE)' CONFIG_SERIAL_21285_OLD $CONFIG_SERIAL_21285 $CONFIG_OBSOLETE dep_bool ' Console on DC21285 serial port' CONFIG_SERIAL_21285_CONSOLE $CONFIG_SERIAL_21285 + dep_bool 'Excalibur serial port (uart00) support' CONFIG_SERIAL_UART00 $CONFIG_ARCH_CAMELOT + dep_bool ' Support for console on Excalibur serial port' CONFIG_SERIAL_UART00_CONSOLE $CONFIG_SERIAL_UART00 + dep_bool 'SA1100 serial port support' CONFIG_SERIAL_SA1100 $CONFIG_ARCH_SA1100 dep_bool ' Console on SA1100 serial port' CONFIG_SERIAL_SA1100_CONSOLE $CONFIG_SERIAL_SA1100 if [ "$CONFIG_ARCH_SA1100" = "y" ]; then @@ -46,21 +49,6 @@ dep_bool ' Support special multiport boards' CONFIG_SERIAL_8250_MULTIPORT $CONFIG_SERIAL_8250_EXTENDED dep_bool ' Support Bell Technologies HUB6 card' CONFIG_SERIAL_8250_HUB6 $CONFIG_SERIAL_8250_EXTENDED - if [ "$CONFIG_SERIAL_AMBA" = "y" -o \ - "$CONFIG_SERIAL_CLPS711X" = "y" -o \ - "$CONFIG_SERIAL_SA1100" = "y" -o \ - "$CONFIG_SERIAL_ANAKIN" = "y" -o \ - "$CONFIG_SERIAL_8250" = "y" ]; then - define_bool CONFIG_SERIAL_CORE y - else - if [ "$CONFIG_SERIAL_AMBA" = "m" -o \ - "$CONFIG_SERIAL_CLPS711X" = "m" -o \ - "$CONFIG_SERIAL_SA1100" = "m" -o \ - "$CONFIG_SERIAL_ANAKIN" = "m" -o \ - "$CONFIG_SERIAL_8250" = "m" ]; then - define_bool CONFIG_SERIAL_CORE m - fi - fi if [ "$CONFIG_SERIAL_AMBA_CONSOLE" = "y" -o \ "$CONFIG_SERIAL_CLPS711X_CONSOLE" = "y" -o \ "$CONFIG_SERIAL_SA1100_CONSOLE" = "y" -o \ Index: Makefile =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/Makefile,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- Makefile 2001/08/30 18:01:58 1.8 +++ Makefile 2001/11/01 21:38:35 1.9 @@ -30,6 +30,7 @@ obj-$(CONFIG_SERIAL_AMBA) += serial_amba.o obj-$(CONFIG_SERIAL_CLPS711X) += serial_clps711x.o obj-$(CONFIG_SERIAL_SA1100) += serial_sa1100.o +obj-$(CONFIG_SERIAL_UART00) += serial_uart00.o include $(TOPDIR)/Rules.make Index: serial_21285.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_21285.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 Index: serial_8250.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_8250.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 Index: serial_8250_pci.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_8250_pci.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 Index: serial_8250_pnp.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_8250_pnp.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 Index: serial_amba.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_amba.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 Index: serial_clps711x.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_clps711x.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- serial_clps711x.c 2001/10/08 04:33:45 1.7 +++ serial_clps711x.c 2001/11/01 21:38:35 1.8 @@ -396,6 +396,8 @@ port->ignore_status_mask |= UARTDR_OVERR; } + quot -= 1; + /* first, disable everything */ save_flags(flags); cli(); @@ -435,8 +437,8 @@ shutdown: clps711xuart_shutdown, change_speed: clps711xuart_change_speed, config_port: clps711xuart_config_port, - release_port: clps711xuart_request_port, - request_port: clps711xuart_release_port, + release_port: clps711xuart_release_port, + request_port: clps711xuart_request_port, }; static struct uart_port clps711x_ports[UART_NR] = { @@ -618,6 +620,7 @@ } static struct console clps711x_console = { + name: SERIAL_CLPS711X_NAME, write: clps711xuart_console_write, #ifdef used_and_not_const_char_pointer read: clps711xuart_console_read, Index: serial_core.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_core.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- serial_core.c 2001/10/08 04:33:45 1.13 +++ serial_core.c 2001/11/01 21:38:35 1.14 @@ -99,9 +99,9 @@ struct uart_info *info = tty->driver_data; unsigned long flags; - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->ops->stop_tx(info->port, 1); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } static void uart_start(struct tty_struct *tty) @@ -112,10 +112,10 @@ pm_access(info->state->pm); - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); nonempty = (info->xmit.head != info->xmit.tail && info->xmit.buf); info->ops->start_tx(info->port, nonempty, 1); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } static void uart_tasklet_action(unsigned long data) @@ -363,12 +363,12 @@ if (!tty || !info->xmit.buf) return; - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); if (CIRC_SPACE(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE) != 0) { info->xmit.buf[info->xmit.head] = ch; info->xmit.head = (info->xmit.head + 1) & (UART_XMIT_SIZE - 1); } - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } static void uart_flush_chars(struct tty_struct *tty) @@ -384,9 +384,9 @@ || !info->xmit.buf) return; - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->ops->start_tx(info->port, 1, 0); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } static int uart_write(struct tty_struct *tty, int from_user, @@ -399,7 +399,6 @@ if (!tty || !info->xmit.buf || !tmp_buf) return 0; - save_flags(flags); if (from_user) { down(&tmp_buf_sem); while (1) { @@ -418,7 +417,7 @@ ret = -EFAULT; break; } - cli(); + spin_lock_irqsave(&info->lock, flags); c1 = CIRC_SPACE_TO_END(info->xmit.head, info->xmit.tail, UART_XMIT_SIZE); @@ -427,14 +426,14 @@ memcpy(info->xmit.buf + info->xmit.head, tmp_buf, c); info->xmit.head = (info->xmit.head + c) & (UART_XMIT_SIZE - 1); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); buf += c; count -= c; ret += c; } up(&tmp_buf_sem); } else { - cli(); + spin_lock_irqsave(&info->lock, flags); while (1) { c = CIRC_SPACE_TO_END(info->xmit.head, info->xmit.tail, @@ -450,7 +449,7 @@ count -= c; ret += c; } - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } pm_access(info->state->pm); @@ -485,9 +484,9 @@ printk("uart_flush_buffer(%d) called\n", MINOR(tty->device) - tty->driver.minor_start); #endif - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->xmit.head = info->xmit.tail = 0; - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); wake_up_interruptible(&tty->write_wait); if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && tty->ldisc.write_wakeup) @@ -516,10 +515,10 @@ uart_send_xchar(tty, STOP_CHAR(tty)); if (tty->termios->c_cflag & CRTSCTS) { - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->mctrl &= ~TIOCM_RTS; info->ops->set_mctrl(info->port, info->mctrl); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } } @@ -536,10 +535,10 @@ } if (tty->termios->c_cflag & CRTSCTS) { - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->mctrl |= TIOCM_RTS; info->ops->set_mctrl(info->port, info->mctrl); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } } @@ -761,9 +760,9 @@ u_int result; unsigned long flags; - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); result = info->ops->tx_empty(info->port); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); /* * If we're about to load something into the transmit @@ -793,13 +792,12 @@ unsigned int *value) { unsigned int arg, old; - unsigned long flags; int ret = 0; if (get_user(arg, value)) return -EFAULT; - save_flags(flags); cli(); + spin_lock_irq(&info->lock, flags); old = info->mctrl; switch (cmd) { case TIOCMBIS: info->mctrl |= arg; break; @@ -809,7 +807,7 @@ } if (old != info->mctrl) info->ops->set_mctrl(info->port, info->mctrl); - restore_flags(flags); + spin_unlock_irq(&info->lock); return ret; } @@ -819,9 +817,9 @@ unsigned long flags; if (info->port->type != PORT_UNKNOWN) { - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->ops->break_ctl(info->port, break_state); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } } @@ -867,13 +865,15 @@ return ret; } +/* + * Called from userspace. We can use spin_lock_irq() here. + */ static int uart_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg) { struct uart_info *info = tty->driver_data; struct uart_icount cprev, cnow; struct serial_icounter_struct icount; - unsigned long flags; int ret = -ENOIOCTLCMD; if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && @@ -918,12 +918,12 @@ * Caller should use TIOCGICOUNT to see which one it was */ case TIOCMIWAIT: - save_flags(flags); cli(); + spin_lock_irq(&info->lock); /* note the counters on entry */ cprev = info->port->icount; /* Force modem status interrupts on */ info->ops->enable_ms(info->port); - restore_flags(flags); + spin_unlock_irq(&info->lock); while (1) { interruptible_sleep_on(&info->delta_msr_wait); /* see if a signal did it */ @@ -931,9 +931,9 @@ ret = -ERESTARTSYS; break; } - save_flags(flags); cli(); + spin_lock_irq(&info->lock); cnow = info->port->icount; /* atomic copy */ - restore_flags(flags); + spin_unlock_irq(&info->lock); if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr && cnow.dcd == cprev.dcd && cnow.cts == cprev.cts) { ret = -EIO; /* no change => error */ @@ -957,9 +957,9 @@ * RI where only 0->1 is counted. */ case TIOCGICOUNT: - save_flags(flags); cli(); + spin_lock_irq(&info->lock); cnow = info->port->icount; - restore_flags(flags); + spin_unlock_irq(&info->lock); icount.cts = cnow.cts; icount.dsr = cnow.dsr; @@ -1005,22 +1005,22 @@ /* Handle transition to B0 status */ if ((old_termios->c_cflag & CBAUD) && !(cflag & CBAUD)) { - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->mctrl &= ~(TIOCM_RTS | TIOCM_DTR); info->ops->set_mctrl(info->port, info->mctrl); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } /* Handle transition away from B0 status */ if (!(old_termios->c_cflag & CBAUD) && (cflag & CBAUD)) { - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); info->mctrl |= TIOCM_DTR; if (!(cflag & CRTSCTS) || !test_bit(TTY_THROTTLED, &tty->flags)) info->mctrl |= TIOCM_RTS; info->ops->set_mctrl(info->port, info->mctrl); - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); } /* Handle turning off CRTSCTS */ @@ -1044,7 +1044,9 @@ } /* - * In 2.4.5, calls to this will be serialized via the BKL + * In 2.4.5, calls to this will be serialized via the BKL in + * linux/drivers/char/tty_io.c:tty_release() + * linux/drivers/char/tty_io.c:do_tty_handup() */ static void uart_close(struct tty_struct *tty, struct file *filp) { @@ -1061,16 +1063,16 @@ #ifdef DEBUG printk("uart_close() called\n"); #endif - - down(&state->count_sem); - save_flags(flags); cli(); - if (tty_hung_up_p(filp)) { - restore_flags(flags); - up(&state->count_sem); + /* + * This is safe, as long as the BKL exists in + * do_tty_hangup(), and we're protected by the BKL. + */ + if (tty_hung_up_p(filp)) goto done; - } + down(&state->count_sem); + spin_lock_irqsave(&info->lock, flags); if ((tty->count == 1) && (state->count != 1)) { /* * Uh, oh. tty->count is 1, which means that the tty @@ -1089,12 +1091,12 @@ state->count = 0; } if (state->count) { - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); up(&state->count_sem); goto done; } info->flags |= ASYNC_CLOSING; - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); up(&state->count_sem); /* @@ -1213,6 +1215,10 @@ set_current_state(TASK_RUNNING); /* might not be needed */ } +/* + * This is called with the BKL in effect + * linux/drivers/char/tty_io.c:do_tty_hangup() + */ static void uart_hangup(struct tty_struct *tty) { struct uart_info *info = tty->driver_data; @@ -1299,22 +1305,22 @@ retval = 0; add_wait_queue(&info->open_wait, &wait); down(&state->count_sem); - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); if (!tty_hung_up_p(filp)) { extra_count = 1; state->count--; } - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); info->blocked_open++; up(&state->count_sem); while (1) { - save_flags(flags); cli(); + spin_lock_irqsave(&info->lock, flags); if (!(info->flags & ASYNC_CALLOUT_ACTIVE) && (tty->termios->c_cflag & CBAUD)) { info->mctrl = TIOCM_DTR | TIOCM_RTS; info->ops->set_mctrl(info->port, info->mctrl); } - restore_flags(flags); + spin_unlock_irqrestore(&info->lock, flags); set_current_state(TASK_INTERRUPTIBLE); if (tty_hung_up_p(filp) || !(info->flags & ASYNC_INITIALIZED)) { @@ -1381,8 +1387,29 @@ } /* - * Ugg, calls to uart_open are not serialised. + * Make sure we have the temporary buffer allocated. Note + * that we set retval appropriately above, and we rely on + * this. */ +static inline int uart_alloc_tmpbuf(void) +{ + if (!tmp_buf) { + unsigned long buf = get_zeroed_page(GFP_KERNEL); + if (!tmp_buf) { + if (buf) + tmp_buf = (u_char *)buf; + else + return -ENOMEM; + } else + free_page(buf); + } + return 0; +} + +/* + * In 2.4.5, calls to uart_open are serialised by the BKL in + * linux/fs/devices.c:chrdev_open() + */ static int uart_open(struct tty_struct *tty, struct file *filp) { struct uart_driver *drv = (struct uart_driver *)tty->driver.driver_state; @@ -1409,21 +1436,8 @@ info->tty = tty; info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0; - /* - * Make sure we have the temporary buffer allocated. Note - * that we set retval appropriately above, and we rely on - * this. - */ - if (!tmp_buf) { - unsigned long buf = get_zeroed_page(GFP_KERNEL); - if (!tmp_buf) { - if (buf) - tmp_buf = (u_char *)buf; - else - goto out; - } else - free_page(buf); - } + if (uart_alloc_tmpbuf()) + goto out; /* * If the port is in the middle of closing, bail out now. @@ -1724,6 +1738,9 @@ #endif #ifdef CONFIG_SERIAL_8250_CONSOLE serial8250_console_init(); +#endif +#ifdef CONFIG_SERIAL_UART00_CONSOLE + uart00_console_init(); #endif } #endif /* CONFIG_SERIAL_CORE_CONSOLE */ Index: serial_sa1100.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/serial/serial_sa1100.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -r1.12 -r1.13 --- serial_sa1100.c 2001/10/08 04:33:45 1.12 +++ serial_sa1100.c 2001/11/01 21:38:35 1.13 @@ -122,9 +122,14 @@ static void sa1100_start_tx(struct uart_port *port, u_int nonempty, u_int from_tty) { if (nonempty) { - u32 utcr3 = UART_GET_UTCR3(port); + unsigned long flags; + u32 utcr3; + + local_irq_save(flags); + utcr3 = UART_GET_UTCR3(port); port->read_status_mask |= UTSR0_TO_SM(UTSR0_TFS); UART_PUT_UTCR3(port, utcr3 | UTCR3_TIE); + local_irq_restore(flags); } } @@ -315,6 +320,9 @@ { } +/* + * Interrupts always disabled. + */ static void sa1100_break_ctl(struct uart_port *port, int break_state) { u_int utcr3; @@ -397,7 +405,7 @@ utcr0 |= UTCR0_OES; } - port->read_status_mask &= UTSR1_TO_SM(UTSR0_TFS); + port->read_status_mask &= UTSR0_TO_SM(UTSR0_TFS); port->read_status_mask |= UTSR1_TO_SM(UTSR1_ROR); if (iflag & INPCK) port->read_status_mask |= UTSR1_TO_SM(UTSR1_FRE | UTSR1_PRE); @@ -421,10 +429,10 @@ } /* first, disable interrupts and drain transmitter */ - save_flags_cli(flags); + local_irq_save(flags); old_utcr3 = UART_GET_UTCR3(port); UART_PUT_UTCR3(port, old_utcr3 & ~(UTCR3_RIE | UTCR3_TIE)); - restore_flags(flags); + local_irq_restore(flags); while (UART_GET_UTSR1(port) & UTSR1_TBY); /* then, disable everything */ |
From: Paul M. <le...@us...> - 2001-10-29 22:58:49
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video/tdfx In directory usw-pr-cvs1:/tmp/cvs-serv6185/video/tdfx Modified Files: sstfb.c Log Message: MODULE_LICENSE() additions.. newport cleanup. Index: sstfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/tdfx/sstfb.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- sstfb.c 2001/06/04 21:35:27 1.7 +++ sstfb.c 2001/10/29 22:58:43 1.8 @@ -1436,6 +1436,8 @@ } module_init(sstfb_init); module_exit(sstfb_cleanup); + +MODULE_LICENSE("GPL"); #endif /* MODULE */ /* |
From: Paul M. <le...@us...> - 2001-10-29 22:58:49
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video In directory usw-pr-cvs1:/tmp/cvs-serv6185/video Modified Files: hgafb.c hitfb.c mdacon.c newport_con.c nvvgacon.c pm3fb.c r3912fb.c sed1345.c sfb.c sgivwfb.c skeletonfb.c vfb.c vga16fb.c vgacon.c vr4181fb.c vrc4171fb.c Log Message: MODULE_LICENSE() additions.. newport cleanup. Index: hgafb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/hgafb.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- hgafb.c 2001/07/10 17:13:10 1.13 +++ hgafb.c 2001/10/29 22:58:43 1.14 @@ -756,7 +756,7 @@ MODULE_AUTHOR("Ferenc Bakonyi (fe...@dr...)"); MODULE_DESCRIPTION("FBDev driver for Hercules Graphics Adaptor"); - +MODULE_LICENSE("GPL"); MODULE_PARM(font, "s"); MODULE_PARM_DESC(font, "Specifies one of the compiled-in fonts (VGA8x8, VGA8x16, SUN8x16, Acorn8x8, PEARL8x8) (default=none)"); MODULE_PARM(nologo, "i"); Index: hitfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/hitfb.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- hitfb.c 2001/08/27 16:36:15 1.5 +++ hitfb.c 2001/10/29 22:58:43 1.6 @@ -166,27 +166,13 @@ return 0; } - -void hitfb_cleanup(struct fb_info *info) +static void __exit hitfb_exit(void) { - unregister_framebuffer(info); + unregister_framebuffer(&fb_info); } - -#ifdef MODULE -int init_module(void) -{ - return hitfb_init(); -} +module_init(hitfb_init); +module_exit(hitfb_exit); -void cleanup_module(void) -{ - hitfb_cleanup(void); -} -#endif +MODULE_LICENSE("GPL"); -/* - * Local variables: - * c-basic-offset: 4 - * End: - */ Index: mdacon.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/mdacon.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -d -r1.38 -r1.39 --- mdacon.c 2001/10/04 02:45:52 1.38 +++ mdacon.c 2001/10/29 22:58:43 1.39 @@ -619,4 +619,6 @@ module_init(mda_console_init); module_exit(mda_module_exit); + +MODULE_LICENSE("GPL"); #endif Index: newport_con.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/newport_con.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- newport_con.c 2001/10/29 00:11:00 1.9 +++ newport_con.c 2001/10/29 22:58:43 1.10 @@ -718,10 +718,7 @@ con_save_screen: DUMMY }; -#ifdef MODULE -MODULE_LICENSE("GPL"); - -int init_module(void) +int __init newport_module_init(void) { if (!newport_startup()) printk("Error loading SGI Newport Console driver\n"); @@ -732,7 +729,7 @@ return 0; } -int cleanup_module(void) +static void __exit newport_module_exit(void); { int i; @@ -740,7 +737,10 @@ /* free memory used by user font */ for (i = 0; i < MAX_NR_CONSOLES; i++) newport_set_def_font(i, NULL); - - return 0; } -#endif + +module_init(newport_module_init); +module_exit(newport_module_exit); + +MODULE_LICENSE("GPL"); + Index: nvvgacon.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/nvvgacon.c,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- nvvgacon.c 2001/05/14 02:50:35 1.15 +++ nvvgacon.c 2001/10/29 22:58:43 1.16 @@ -870,3 +870,5 @@ module_init(nvvgacon_module_init); module_exit(nvvgacon_module_exit); +MODULE_LICENSE("GPL"); + Index: pm3fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/pm3fb.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- pm3fb.c 2001/10/02 11:42:27 1.20 +++ pm3fb.c 2001/10/29 22:58:43 1.21 @@ -2449,4 +2449,7 @@ } module_init(pm3fb_init_module); module_exit(pm3fb_cleanup_module); + +MODULE_LICENSE("GPL"); + #endif /* MODULE */ Index: r3912fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/r3912fb.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- r3912fb.c 2001/06/06 14:24:49 1.3 +++ r3912fb.c 2001/10/29 22:58:43 1.4 @@ -369,5 +369,7 @@ #ifdef MODULE module_init(r3912fb_init); module_exit(r3912fb_exit); + +MODULE_LICENSE("GPL"); #endif Index: sed1345.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/sed1345.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- sed1345.c 2001/06/06 14:24:49 1.5 +++ sed1345.c 2001/10/29 22:58:43 1.6 @@ -175,5 +175,7 @@ #ifdef MODULE module_init(sed1345_init); module_exit(sed1345_exit); + +MODULE_LICENSE("GPL"); #endif Index: sfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/sfb.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- sfb.c 2001/06/06 02:31:06 1.4 +++ sfb.c 2001/10/29 22:58:43 1.5 @@ -231,5 +231,6 @@ #ifdef MODULE module_init(sfb_init); module_exit(sfb_exit); -#endif +MODULE_LICENSE("GPL"); +#endif Index: sgivwfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/sgivwfb.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- sgivwfb.c 2001/10/29 00:11:00 1.10 +++ sgivwfb.c 2001/10/29 22:58:43 1.11 @@ -668,13 +668,7 @@ return -ENXIO; } -#ifdef MODULE -int init_module(void) -{ - return sgivwfb_init(); -} - -void cleanup_module(void) +static void __exit sgivwfb_exit(void) { struct sgivw_par *par = fb_info.par; @@ -684,4 +678,8 @@ iounmap(fb_info.screenbase); } -#endif /* MODULE */ +module_init(sgivwfb_init); +module_exit(sgivwfb_exit); + +MODULE_LICENSE("GPL"); + Index: skeletonfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/skeletonfb.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -d -r1.11 -r1.12 --- skeletonfb.c 2001/08/03 17:08:45 1.11 +++ skeletonfb.c 2001/10/29 22:58:43 1.12 @@ -474,4 +474,6 @@ #ifdef MODULE module_init(xxxfb_init); module_exit(xxxfb_cleanup); + +MODULE_LICENSE("GPL"); #endif /* MODULE */ Index: vfb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/vfb.c,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- vfb.c 2001/08/03 17:08:51 1.29 +++ vfb.c 2001/10/29 22:58:43 1.30 @@ -424,4 +424,6 @@ module_init(vfb_init); module_exit(vfb_cleanup); + +MODULE_LICENSE("GPL"); #endif /* MODULE */ Index: vga16fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/vga16fb.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -d -r1.21 -r1.22 --- vga16fb.c 2001/06/10 21:20:45 1.21 +++ vga16fb.c 2001/10/29 22:58:43 1.22 @@ -564,6 +564,8 @@ #ifdef MODULE module_init(vga16fb_init); module_exit(vga16fb_exit); + +MODULE_LICENSE("GPL"); #endif /* Index: vgacon.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/vgacon.c,v retrieving revision 1.56 retrieving revision 1.57 diff -u -d -r1.56 -r1.57 --- vgacon.c 2001/10/07 17:16:06 1.56 +++ vgacon.c 2001/10/29 22:58:43 1.57 @@ -994,4 +994,6 @@ module_init(vga_console_init); module_exit(vga_module_exit); + +MODULE_LICENSE("GPL"); #endif Index: vr4181fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/vr4181fb.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- vr4181fb.c 2001/10/05 03:58:58 1.2 +++ vr4181fb.c 2001/10/29 22:58:43 1.3 @@ -444,5 +444,7 @@ #ifdef MODULE module_init(vr4181fb_init); module_exit(vr4181fb_exit); + +MODULE_LICENSE("GPL"); #endif Index: vrc4171fb.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/vrc4171fb.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- vrc4171fb.c 2001/08/27 16:36:15 1.2 +++ vrc4171fb.c 2001/10/29 22:58:43 1.3 @@ -250,5 +250,7 @@ #ifdef MODULE module_init(vrc4171fb_init); module_exit(vrc4171fb_exit); + +MODULE_LICENSE("GPL"); #endif |
From: Paul M. <le...@us...> - 2001-10-29 22:58:49
|
Update of /cvsroot/linuxconsole/ruby/linux/drivers/video/riva In directory usw-pr-cvs1:/tmp/cvs-serv6185/video/riva Modified Files: fbdev.c Log Message: MODULE_LICENSE() additions.. newport cleanup. Index: fbdev.c =================================================================== RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/riva/fbdev.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- fbdev.c 2001/06/06 14:24:49 1.10 +++ fbdev.c 2001/10/29 22:58:43 1.11 @@ -1431,7 +1431,7 @@ MODULE_AUTHOR("Ani Joshi, maintainer"); MODULE_DESCRIPTION("Framebuffer driver for nVidia Riva 128, TNT, TNT2"); - +MODULE_LICENSE("GPL"); /* from GGI */ static void riva_save_state (struct rivafb_info *rinfo, struct riva_regs *regs) |
On Sun, Oct 28, 2001 at 04:11:02PM -0800, James Simmons wrote: > Update of /cvsroot/linuxconsole/ruby/linux/drivers/video > In directory usw-pr-cvs1:/tmp/cvs-serv10630/drivers/video >=20 > Modified Files: > Config.in fbcon.c fm2fb.c macfb.c newport_con.c promcon.c=20 > sa1100fb.c sgivwfb.c=20 > Log Message: > Synced to 2.4.13 >=20 [snip] > Index: newport_con.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/video/newport_con.c,v > retrieving revision 1.8 > retrieving revision 1.9 > diff -u -d -r1.8 -r1.9 > --- newport_con.c 2001/09/01 21:28:56 1.8 > +++ newport_con.c 2001/10/29 00:11:00 1.9 [snip] > -void __exit newport_module_exit(void) { > - printk("Unloading SGI Newport Console Driver\n"); > -} > +int cleanup_module(void) > +{ > + int i; > =20 > -module_init(newport_module_init); > -module_exit(newport_module_exit); > + printk("Unloading SGI Newport Console Driver\n"); > + /* free memory used by user font */ > + for (i =3D 0; i < MAX_NR_CONSOLES; i++) > + newport_set_def_font(i, NULL); > =20 > + return 0; > +} > +#endif >=20 Careful here.. Linus's tree is still using init_module()/cleanup_module() f= or newport.. we want to use module_init()/module_exit() instead.. Regards, --=20 Paul Mundt <pm...@mv...> MontaVista Software, Inc. |
From: James S. <jsi...@us...> - 2001-10-29 00:16:48
|
Update of /cvsroot/linuxconsole/ruby In directory usw-pr-cvs1:/tmp/cvs-serv12574 Added Files: AGAINST-2.4.13 Log Message: --- NEW FILE: AGAINST-2.4.13 --- |
From: James S. <jsi...@us...> - 2001-10-29 00:16:10
|
Update of /cvsroot/linuxconsole/ruby In directory usw-pr-cvs1:/tmp/cvs-serv12431 Removed Files: AGAINST-2.4.12 Log Message: --- AGAINST-2.4.12 DELETED --- |