summaryrefslogtreecommitdiffstats
path: root/sys/pccard/pcic.c
Commit message (Collapse)AuthorAgeFilesLines
* /* -> /*- for license, minor formatting changesimp2005-01-071-1/+3
|
* Move PNP IDs back into oldcard filesimp2004-08-131-1/+0
|
* - Implement selwakeuppri() which allows raising the priority of atanimura2003-11-091-1/+1
| | | | | | | | | | | | | thread being waken up. The thread waken up can run at a priority as high as after tsleep(). - Replace selwakeup()s with selwakeuppri()s and pass appropriate priorities. - Add cv_broadcastpri() which raises the priority of the broadcast threads. Used by selwakeuppri() if collision occurs. Not objected in: -arch, -current
* Change all SYSCTLS which are readonly and have a related TUNABLEsilby2003-10-211-3/+3
| | | | | from CTLFLAG_RD to CTLFLAG_RDTUN so that sysctl(8) can provide more useful error messages.
* More debug under boot verbose.imp2003-08-291-2/+3
|
* add debug to pcic memory mapping routineimp2003-08-271-0/+5
|
* OLDCARD is OBSOLETE_IN_6. Tag it as such.imp2003-06-121-0/+2
|
* MFp4:imp2002-11-271-16/+14
| | | | | | | | | Fix a bug with the 3.3V code for the ricoh bridges. I got the bit detect backwards. Also, we can only detect 3.3V cards when the GPI interrupt is disabled. So when it is enabled assume 5.0V card. Obtained from: NetBSD (takemura-san from patches by ngc@ff.iij4u.or.jp) Approved by: re (blanket)
* Parens considered good.imp2002-09-291-1/+1
|
* Add support for writing to mapping high memory for pccard memoryimp2002-07-201-0/+11
| | | | | | | | | | windows. Right now we only support pci chips that are memory mapped. These are the most common bridges in use today and will help a large majority of the users. I/O mapped PCI chips support this functionality in a different way, as do some of the ISA bridges (but only when mounted on a motherboard). These chips are not supported by this change.
* Integrate the hw.pcic.pd6722_vsense tunable from the nomads list.imp2002-07-181-15/+49
| | | | | | | | | | | This allows one to select the method of 3.3V card detection from the three possible choices (none (0), the "6710 way" (1) and the "6729 way" (2)). The default is the 6710 way, since it works in the most cases. The datasheets for the 6722 suggest that the '29 way is more correct, but experience has shown this method to cause some laptops to hang solid. See source code for details until I update the man page. Submitted by: shibata-san (chiharu shibata <chi@bd.mbn.or.jp>)
* o Remove workaround that I put in to mask the BadVcc problem.imp2002-07-171-1/+1
| | | | | | | | | | | o Add preliminary support for Cirrus Logic CL-PD6729 using PCI interrupts. To use it you you need to set hw.pcic.pd6729_intr_path to 2. This is allow us to still default to ISA intrrupt path for this part (which is found much more often in laptops using ISA IRQs). But some PCI cards have this part on them and this should allow them to be used. It is untested on PCI, but it seems to not break the ISA case. o Better sysctl descriptions (I hope).
* Typo: do do -> to do.keramida2002-07-141-1/+1
| | | | Reviewed by: imp
* What:imp2002-06-231-15/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | o ToPIC is happy with two cards now, even when the two cards are modems. o Fix (all?) hangs on boot when power is applied to the card. I suspect that this will make the Ricoh bridges happier and also make a lot of VAIO owners happy (confirm to me in private email please :-). o All Cardbus bridges should now support 3.3V, X.XV and Y.YV cards, to the extent that the underlying hardware supports such cards. (X.X and Y.Y haven't been assigned values yet :-). o Better 3.3V support for Ricoh ISA bridges. How: o Don't mess with the power register when scanning the cards. It is unnecessary and causes BADVcc conditions on many chipsets. These in turn can cause an interrupt storm. o Make pcic_disable reset the slot's voltage. o Move initializing voltage for the slot until after it has been disabled. o Fix a lot of issues with the pcic_cardbus_power routine. We now properly enable the card and take it out of reset after a power change. o When detecting the card's voltage, if we're in a BadVcc state, direct the bridge to rescan the card for what it supports. (we might need to in the future set the power register to 0 before doing this). o Don't preserve CLKSTOP. need to revisit this. o Better support for Ricoh ISA bridges for 3.3V cards. o Don't write to PCIC_POWER directly as offten, but instead go through the pcic_power interface. o All cardbus bridges now default to use cardbus power control. o Add misc register definitions. o remove some (now) bogus comments. Extra Special Thanks To: Scott Lamber for his kind and generous loan of a Toshiba laptop with a ToPIC 100 in it for my use.
* Better power code and better power diagnosticsimp2002-03-201-29/+81
|
* The datasheet for the 6710/6722 says that you must use one method toimp2002-01-141-2/+8
| | | | | | | | | | | | | | | detect 3.3V cards for the 6710 and another method for the 6722. This latter method is also how the 6729/6730 is supposed to detect 3.3V cards. This method works great on my Fujitsu Stylistic 500. Sadly, it appears that not all laptop makers are as detail oriented as the folks that made the Stylistic. IBM Thinkpad 701C and AST Asentia 810N both hang hard when the 6729 method is used, but at least the thinkpad works when the 6710 method is used. The failure mode appears to be any access to the memory that we've mapped the CIS in causes the machine to hang until you eject the card. The Thinkpad, at least, works with this change, and it doesn't break my Stylistic. MFC after: 4 days
* Introduce the concept of "default" voltage. Have pccard layer use thisimp2001-11-111-55/+82
| | | | | | | | | value (-1) in lue of 50 (which assumes a 5.0V card). The rest of the pccard system doesn't detect the proper voltage for the card, so we have to do it on powerup. Many (all?) 3.3V cards can tolerate 5.0V for reading the CIS, but may fail to operate properly when so powered. Idea from: Chiharu Shibata-san <chi@bd.mbn.or.jp> in bsd-nomads:15867
* o Try to do 3.3V support better for the 6722 and 6729/30.imp2001-11-091-14/+32
| | | | | | | | | | | | | o Bite the bullet and create controller types for the 6729 and also for the 673x. Rename the 672x to 6722. o Define minimal extended register info (just register 0xa for reading VS[12]). # I think the last version may have broken 673x controllers, but this should # fix them. Tested on the 6722, but not the 6729. Ideas from: Chiharu Shibata-san's article in bsd-nomads:15866
* Fix the 3.3V support for Cirrus Logic CL-PD6710. This appears to workimp2001-11-091-0/+22
| | | | | | | | | | | | | | | | | on my CL-PD6722, but won't work on the CL-PD6729. The latter two need more sophisticated detection of 3.3V cards than I'm up to at the moment. Also, only a few of the ISA chipsets that support 3.3V will likely work at the moment. It appears that for 3.3V cards we must detect them and adjust the pwr.vcc value from 50 to 33. Give a strong hint to automatically power up the card for PD_POWER cards. This makes my SMC 2602W (the 3.3V version of the 2632W) work on my Fujitsu Stylistic 500. SMC 3.3V card donated by: Ryan Losh Thanks to: bsd-nomads for reviews of past 3.3V code
* Add a tunable (hw.pcic.boot_deactivated) which will boot the systemimp2001-10-231-1/+14
| | | | | | | | | | with the pccards deactivated. This can work around some problems in pccard system, but is also for people that want to explicitly turn on cards after boot rather that at boot. MFC after: 7 days Submitted by: iwasaki-san Reviewed by: ume-san, shiba-san
* <jkh> "Hey Rocky, watch me eject this pccard outta my laptop!" "What,imp2001-09-131-8/+0
| | | | | | | | | | | | | | | | | | | | | | again? That NEVER works!" "This time for sure!" Minor overhaul of how we do interrupts for the pci interrupt routing case to cope with card ejection better (read: make it not hand on so many cards): o Reintroduce func_intr and func_arg and use the to store the interrupt handler to call. o Create a pcic_pci_func_intr to call the real interrupt handler iff the card hasn't been ejected. o Remove some checks in pcic_setup_intr now that it is used exclusively for isa routed interrupts. o Defer the eject event until later too, but make sure we can't do any client driver ISR calling in the interrum. o Add some simple code to make sure that we don't attach more than one child. This should fix pccardd starting twice problem (ala single user -> multi-user when you started pccardd by hand in SU). MFC: after jkh thinks I've put the crack pipe away.
* MFS: put debug writes behind boot verbose.imp2001-09-041-7/+16
|
* Move to using a chip function + function pointers to deal with theimp2001-09-041-21/+97
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | function and csc interrupt routing path (eg, ISA or PCI) so that we can more easily switch between the two. When we don't have a card ISR, put the function interrupt into ISA mode. This effectively masks the interrupt since it happens once, and not again until we have an ISR. This should help hangs, and might help people that unwisely update the kernel w/o updating pccardd. This is done at mapirq time. Force CL-PD6729/30 to use ISA interrupt routing and maybe even detect the number of pccard slots properly (this is still WIP). We aren't going to support PCI interrupts for this release. A future release should support them, however. Shibata-san's 3.3V fixes are not included. Add a hack which should, in i386, rewrite IRQ 0 cardbus bridges to be IRQ 255, which should cause interrupts to be routed. This is mostly untested since my one tester disappeared after reporting nothing changed. Implement, but do not use, a power method called cardbus. It looked like a great way to get around the 3.3V problem, but it seems that you can only use it to power cardbus cards (I get no CIS when I enable it, so maybe we're programming things bogusly). GC the intr and argp stuff from the slot database. Improve the ToPIC support with the power hacks that Nakagawa-san published in FreeBSD Press and that Hiroyuki Aizu-san ported to -stable. The ToPIC hacks were for 3.3V support in ToPIC 100, but it looks like the '97 also has identical registers, so use them too. Add some #defines for the cardbus power stuff. Finally implement making CSC on the Ricoh chips ISA or PCI. This will allow polling mode to work on vaios, I think. Add some minor debugging. This should likely be cleaned up or put behing a bootverbose. Some of this work, and earlier work, was influanced by Chiharu Shibata-san's power handing patches posted to bsd-nomads:15866. MFC: Soon, if possible.
* The tunable is hw.pcic.irq, but the hw.pcic.override_irq was how it wasimp2001-08-251-2/+1
| | | | reported in sysctl.
* Rearrange how we do interrupt routing tweaking. We now haveimp2001-08-211-6/+6
| | | | | hw.pcic.intr_path {1,2} 1 == ISA, 2 == PCI hw.pcic.init_route Force TI chipset initializations in edge case.
* Merge from stable (which seems to have been spammed at some point in current):imp2001-08-141-2/+7
| | | | | #ifdef the deltap pcic_set_memory_offset argument so that raylink driver works.
* Minor style(9) nits to make code more readableimp2001-08-141-4/+3
|
* Treat min,max of 0,0 for IRQ special. Reject it if we didn't specificallyimp2001-08-141-3/+26
| | | | | | | | assing an IRQ. Add better comments while I'm here. MFC after: 1 day # Note: That's merging all the -current pci pcic code, not just this one # change for the Aug 15th code freeze.
* Move ISA interrupt ISR and timeout routines to pcic from pcic_isa soimp2001-08-101-0/+68
| | | | | that we can use them in the pci code when we have to fall back to ISA interrupt routing.
* Now that we are setting a bit in the PCIC_INT_GEN (0x3) register, weimp2001-08-051-2/+2
| | | | | | | | | | | can't blindly write zero into it to disable the card. We must preserve this bit. This changes pcic_disable to only clear the bits we know we need to clear on card disable, thus preserving the magic bit for many TI bridges. This appears to have fixed the problems that people are reporting about the system failing to recognize cards being inserted or removed (or both). Greg: This may fix your problem too :-).
* TI cardbus bridges, 12xx and newer, have an interesting register. Itimp2001-08-011-2/+23
| | | | | | | | | | | | | | | is the diagnostics register at offset 0x93. When bit 5 is set in this register, bits 4-7 in ExCA register 0x5 being 0000 are required for pci interrupt routing. When it is clear, then bit 4 of ExCA register 0x3 is used to enable it. The only other issue is that when you route interrupts this way, you must read ExCA register 0x4 in order to clear the interrupt, else you get an interrupt storm. Deal with this requirement by setting things up. It is believed that this won't hurt other chipsets, but other chipsets may require their own work arounds.
* A bunch of interrupt related cleanup.imp2001-07-311-5/+40
| | | | | | | | | | | | | o Move PIOCSRESOURCE from pccard to pcic so the kernel can give pccardd better hints as to what resources to use. o Implement an undocumented hw.pcic.interrupt_route to allow people that need to do so to route their interrupts in a non-standard way. o Only preallocate a resource in probe if we're routing via pci. o If we aren't routing via pci, then set the irq to use explicitly to defeat the automatic IRQ routing of the pci layer. This, with the pccardd code should be close to what can be committed to -stable.
* Move pcic_override_irq from pcic_isa, to pcic.imp2001-07-311-0/+7
|
* It is spelled INTR_FAST in current and INTR_TYPE_FAST in stable, so try toimp2001-07-281-1/+4
| | | | make allowances.
* Stable requires machine/clock.h to quiet warnings. It isn'timp2001-07-281-0/+1
| | | | | | strictly necessary on current, but having it in here makes the diffs with stable smaller and doesn't hurt anything except for phk's redundant include finder.
* Introduce two new tunables from the boot loader.imp2001-07-271-1/+5
| | | | | | | | | | | | | | | | | | | | | | hw.pcic.irq Globally set the IRQ for all pcic devices' management interrupt (aka card status change or CSC interrupt) This is what used to be known as machdep.pccard.pcic_irq (which has been retained for now for compatibility). hw.pcic.ignore_fuction_1 Ignores function 1 for all PCIC bridges by not attaching to them. Lucent released a huge batch of cards that were imporperly manufactuered (lacking the 0 ohm resister to disable slot 1). This is a big hammer to keep those cards from causing problems (I've had 4 people contact me saying my patches worked great once they added a kludge to always ignore function 1, or until they soldered these resistors in place!). No clue where to document these. They act as both boot loader environment variables, as well as read-only sysctls after boot. At the same time, sort sys/systm.h in its proper order after sys/sysctl.h.
* Minor nits merged from my stable tree:imp2001-07-271-0/+1
| | | | | | | | | | | | o kill blank line that I introduced in cardinfo.h o Delete unused variable wasinactive. o return 0 from pccard_resume. o Set the state and lastsate initially to be empty. o move comment above code for interrupt dispatching. o Powerstate interface is now available as of 430002, not 500000 (note that this change will be not 100% correct since the power state stuff didn't enter current until well after 500000, but it is good enough for the two branche we have going now).
* Attempt to fix and document interactions between suspend/resume and pccardcimp2001-07-271-18/+17
| | | | | | | | | | | | | | | | | | | | power x 0. pccardc power x 0 used to disable the slot. But a suspend/resume would reactivate the pccard. It no longer does that. Now the disabling of the slot is sticy until it is reset with power x 1 or the card is ejected. This seems closer to correct behavior to me. o Process all card state changes the same using pccard_do_stat_change(). o Cleanup disabling the card so that we can preserve the state after the change. Basically, don't set it to empty as often as we do. o On suspend, the new state is "empty" and the laststate is "suspend" o Document state machine with a diagram of states and edges. The edges are labeld to tell the reader what event causes the external state changes. o "machdep.pccard.pcic_resume_reset" may be obsolete now. We always call the bridge driver's resume method on resume now. Otherwise cards won't automatically show up. If it needs to stay, I'll add it back.
* Check the state of the slot when we resume. Set it to empty if we noimp2001-07-261-1/+5
| | | | | | | longer have a pccard in the slot. This fixes the problem where pccard would say that a card had been inserted on resume. This also appears to make the insert/remove events more reliable after a resume as well, but that may be a different bug I need to hunt down.
* Clarify some of the 3.3V code with better comments. Also, since theimp2001-07-011-6/+12
| | | | types are treated as a bitfield, test them as such.
* Add comments explaining why we do the somewhat odd irq mapping on PC98imp2001-07-011-0/+7
| | | | machines with C-BUS cards.
* Minor whitespace nit.imp2001-07-011-1/+1
|
* Work around a bug in the current interrupt system by explicitlyimp2001-06-251-0/+4
| | | | | | | | | | | | rejecting INTR_FAST interrupts. Since they can't be shared anyway, this just short circuits a failure case that should work but is panic fodder now. This bug is that if the interrut condiation is active when you activate the interrupt, then the interrupt routine will be called. jhb had a patch that may or may not work to fix it, but I've lost it. This may be due to the sio probe doing something odd too.
* Save the IRQ that we get in pci attachment.imp2001-06-161-1/+5
| | | | | | | | | | | Print type of pci bridge we find. Force the IRQ of pci bridges upon all its children. Allocate the resources on behalf of the bridge when we're testing to see if they exist. This should help people who don't read updating instructions very well. This patch started out with an idea from Shigeru Yamamoto-san in -current.
* On PC-98, map IRQ 6 to IRQ 7 at the pcic level. That is, when we'reimp2001-06-161-0/+12
| | | | | | | | | | | | told to use IRQ 6, progam the pcic to use irq 7 instead. Evidentally, at least some of the cards are wired this way. If you want to use irq 6, configure it. All the mapping is done just before we set the interrupt registers. See [FreeBSD98-testers 5064] for details. Added commentary about valid interrupts on some CBUS pc98 CL PD6722 based cards. Submitted by: Hiroshi TSUKADA-san <hiroshi@kiwi.ne.jp>
* Move the pcic interrupt from pcic.c to pcic_isa.c. The ISA handlingimp2001-06-041-127/+17
| | | | | | | | | | | | | | for card change interrupts is different than the pci stuff that's coming soon. Set the management irq in different ways. If pci_parallel interrutp routing, then use the PCI way of getting interrupts. Move polling mode into pcic_isa since when we're routing via pci polling doesn't work because many bridges (systems hang solid). If we're routing interrupts via pci, they can be shared, so flag them as such. Note, this doesn't actually change anything since the pci attachment isn't quite ready to be committed.
* Turns out that one bit isn't enough. Introduce two new fieldsimp2001-05-281-1/+17
| | | | | | | | | | | | | | csc_route and func_route to hold the way that each interrupt is routed. csc is Card Status Change in the datasheets and standard, but is called "Management Interrupt" in FreeBSDese. There are three types of interrupt routing: ISA parallel, PCI parallel and ISA serial (some chipsets support other types as well, but I don't plan on supporting them). When we try to allocate an interrupt, and the type for that interrupt is pci_parallel, allow it to be shared by oring in RF_SHAREABLE to the flags argument. Introduce pcic_alloc_resource to allow this to happen.
* Allow a shareable interrupts. Note, the bridge must set this flag orimp2001-05-271-15/+15
| | | | | | | | the irq will be unshareable, as things are now. More work likely is needed, but this is a good checkpoint. # pcic_pci.c is getting closer :-)
* Migrate from unit based to dev base. Don't save unit number, but do saveimp2001-05-251-2/+2
| | | | | dev. Convert all uses of unit to dev as appropriate. Minor comment fixes to pcic_softc definition.
* Add intrack field to each slot. This can be used to acknowledgeimp2001-05-251-0/+3
| | | | | | | interrupts on other buses. Right now it isn't used, but will be for the pci attachment. # Add copyright by me for this year since I've changed so much.
OpenPOWER on IntegriCloud