| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
|
|
|
|
|
| |
prpe is short for Physical Region Page Entry. this is where long
lists of dma regions go when they wont fit into a submission queue
entry.
|
|
|
|
|
|
|
|
|
|
|
| |
nvme and the host cpu need to agree on the page size because its
the implicit size of the elements in the chips scatter gather lists.
if the min nvme size is greater than the cpus page size then we
cant guarantee that io buffers are contig for nvme pages.
nvme 1.1 provides an alternative sgl mechanism, so if this really
becomes a problem in the future we can fix it on 1.1 and later
devices.
|
|
|
|
| |
it ends up being a use after free, which disagrees with the midlayer.
|
|
|
|
| |
again, only called during autoconf which is a kind of process context.
|
|
|
|
|
|
|
|
|
|
|
| |
nvme 1.0 does not use conventional scatter gather lists of
address+length pairs. instead, it simply expects a list of page
addresses. this should be ok if we only feed it single VA chunks
which map directly to only whole physical pages.
nvme 1.1 introduced another scather format, but still accepts the
1.0 format too. we'll stick to the 1.0 format so we can support 1.0
devs.
|
|
|
|
| |
this means we'll notice io completions.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
ive only tested reads, and not very big ones.
nvme 1.0 has a very stupid/naive idea about what constitutes a
scatter gather list. it assumes io is in whole pages in memory, but
i dont know if that is true in our kernel.
this could be cleaned up a bit, and it currently runs with a single
opening for the whole scsi layer and a bunch of magic values for
the size and number of the io queues.
|
| |
|
|
|
|
| |
this is necessary to run reads and writes against the device.
|
| |
|
|
|
|
| |
at the moment this just pretends the commands completed fine.
|
|
|
|
| |
read cap 16 claims the devices are thin.
|
|
|
|
|
| |
most values are as per the nvm to scsi mapping guide. this doesnt
do vpd at all, so no devids or serial numbers just yet.
|
|
|
|
|
|
|
|
| |
probe issues a namespace identify against the "target". if it works
it stashes a copy of the info, otherwise it tells the midlayer to
avoid it.
free gets rid of the stashed info.
|
| |
|
|
|
|
| |
so far the only useful info is namespace identify info
|
|
|
|
|
| |
the nn is used to size the scsi bus, and the controller identify is used
to build responses for various scsi commands.
|
| |
|
| |
|
| |
|
|
|
|
| |
it's still 0 on success, but is the actual bits rather than a mashup of it
|
| |
|
|
|
|
| |
make it a u_int16_t like the hw while here.
|
| |
|
|
|
|
| |
most importantly this gets the proper timeout for chip enables/disables.
|
| |
|
|
|
|
|
| |
dont need a billion tabs for the function prototypes. just some
akward line wrappings.
|
| |
|
| |
|
|
|
|
| |
when the caller fills the entry.
|
|
|
|
|
|
|
| |
to to the completion queue head doorbell instead of the submission queue
tail doorbell.
this lets us submit more than one command to the chip.
|
| |
|
| |
|
|
|
|
| |
ok tedu
|
|
|
|
| |
after discussions with beck deraadt kettenis.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
entry. if i ever implement timeouts ill use high bits in the int
or the phase bit to indicate non chip related errors. a successful
chip status conveniently maps to 0. how handy.
this lets me move the completion handling for the controller
identification commands back into the caller. at the moment im just
printing out controller and firmware details like we do on
mfi/mpii/mfii.
|
|
|
|
|
|
|
|
|
|
|
| |
steps, but unfortunately the next step after "talk to the chips
registers" was "get command queues working" which ended up being a
huge amount of plumbing.
anyway, this lets me successfully run an identify controller command
against the chip and should be cut up the right way to be usable
for io command submissions. will need to think about how to avoid
overflowing rings though.
|
|
|