summaryrefslogtreecommitdiff
path: root/sys/dev/pci/ahci.c
AgeCommit message (Collapse)Author
2006-12-12small cleanup after feng shuiDavid Gwynne
2006-12-12after allocating the ahci_port bits, stash it in the softc rather thanDavid Gwynne
drop it. im guessing at some point we'll want to use each port, knowing where they are can help.
2006-12-12feng shuiDavid Gwynne
2006-12-12for each port the controller says is hooked up, go and allocate ourDavid Gwynne
ahci_port structs for it.
2006-12-12start implementing the bits that allocate the per port structures and theirDavid Gwynne
ccb lists. this is missing handling of the dmamem each port needs to manage, but that can wait till i figure out how it fits together. insane stuff.
2006-12-12remember our dma tag. be able to do dma is like, really cool. man.David Gwynne
2006-12-12add functions to get and put ccbs out of each ports command free list.David Gwynne
2006-12-12add wrappers for reading and writing a ports registers called ahci_pread,David Gwynne
and ahci_pwrite. these will use an io handle into a window of the controllers register space that can be created with bus_space_subregion, and which is stored in the ahci_port struct.
2006-12-12introduce the command control blocks, and the concept that they are managedDavid Gwynne
per port rather than as a big list for the whole controller. the softc has an array of pointers to a struct that manages all the shizz relevant to a particular port. when we map the controllers ports, we'll allocate these as needed. if the port isnt implemented, we leave its pointer in the softc null and use that to decide if a drive might be there or not, rather than lookup up the PI register all the time. a comparison has to null has to be cheaper than doing bit operations, surely.
2006-12-12stash the number of commands each port can do in the softcDavid Gwynne
2006-12-11use oct bits consistently in the format string for %b. pointed out byDavid Gwynne
deraadt@
2006-12-11oops, we want to return when everything goes well in ahci_attach, ratherDavid Gwynne
than fall through to the bits that do cleanup when an error occurs.
2006-12-11remove the argument to all the port registers that say which port you wantDavid Gwynne
to address. instead make them simply offsets from the start of a ports register space, which is something we can easily set up with bus_space_subregion. this should make the code a lot easier to read later on.
2006-12-11dont stash the implemented ports map, im going to use a differentDavid Gwynne
mechanism to figure out if a port is usable or not later on.
2006-12-11define the command structs used by the ports.David Gwynne
this stuff isnt endearing me to ata at all, and apparently ahci is a good ata controller. the command path looks way more complicated than it needs to be (or maybe i am used to really good scsi controllers, i dont know). a lot of the terminology seems annoyingly different just for the sake of being different. i mean, what is the advantage of calling a scatter gather lement a "physical region descriptor table"? noone else calls it that. there's a lot of weird stuff in here. blah.
2006-12-11pull the wrapper for allocations of dma mem with a single segment in fromDavid Gwynne
arc, which got it from mpi, which got it from ami. grange is right, we should look at pushing it back up into the bus_dma api somewhere.
2006-12-11oops, too far for the match/attach funcsDavid Gwynne
2006-12-11give the function prototypes a bit more room for the return type.David Gwynne
2006-12-11per port register definitionsDavid Gwynne
2006-12-11fix %b format string now that deraadt fixed printfDavid Gwynne
2006-12-11stash the field showing which ports are hooked up, and dump it if verboseDavid Gwynne
debug is on
2006-12-11if ahci debug and verbose output is enabled, then dump the cap register.David Gwynne
this also fixes a few reg definition errors i found after having them dumped. something seems really screwy with %b. i cant select the 32nd bit position using \x20 or \040, so im using \32 and the rest are octal (\oNN). hex (\xNN) seems really really borked, and the compiler doesnt like eating some of the dec ones (eg, \8BITNAME).
2006-12-09sigh, split the bus space mapping and interrupt hookup apart so i canDavid Gwynne
reset the controller and clear interrupts off it before doing the hookup.
2006-12-09reset the hba and set the enable bit.David Gwynne
2006-12-09figure out which revision of ahci we're trying to use and print it out.David Gwynne
if we don't know about it, bomb out.
2006-12-09split the mapping of the pci resources out of the main attach funcDavid Gwynne
2006-12-09add wrappers for safe access to the register space. stolen from arc (whichDavid Gwynne
stole them from mpi).
2006-12-09add macros for debug shizzDavid Gwynne
2006-12-09bit definitions for the cap and ghc registersDavid Gwynne
2006-12-09registers for hba controlDavid Gwynne
2006-12-09the start of a driver for ahci controllers. this does nothing but map theDavid Gwynne
register space and hook an interrupt up for the controller i have, but it is going into the tree so i can work on it. commit early, commit often