src/drivers/at_wini/at_wini.c File Reference

#include "at_wini.h"
#include <minix/sysutil.h>
#include <minix/type.h>
#include <minix/endpoint.h>
#include <sys/ioc_disk.h>
#include <ibm/pci.h>
#include <sys/mman.h>

Go to the source code of this file.

Classes

struct  command
struct  wini
struct  prdte

Defines

#define ATA_DMA_SECTORS   64
#define ATA_DMA_BUF_SIZE   (ATA_DMA_SECTORS*SECTOR_SIZE)
#define N_PRDTE   1024
#define PRDT_BYTES   (sizeof(struct prdte) * N_PRDTE)
#define PRDTE_FL_EOT   0x80
#define sys_voutb(out, n)   at_voutb(__LINE__, (out), (n))
#define sys_vinb(in, n)   at_vinb(__LINE__, (in), (n))
#define sys_outb(p, v)   at_out(__LINE__, (p), (v), "outb", _DIO_BYTE)
#define sys_inb(p, v)   at_in(__LINE__, (p), (v), "inb", _DIO_BYTE)
#define sys_outw(p, v)   at_out(__LINE__, (p), (v), "outw", _DIO_WORD)
#define sys_inw(p, v)   at_in(__LINE__, (p), (v), "inw", _DIO_WORD)
#define sys_outl(p, v)   at_out(__LINE__, (p), (v), "outl", _DIO_LONG)
#define sys_inl(p, v)   at_in(__LINE__, (p), (v), "inl", _DIO_LONG)
#define ATA_IF_NOTCOMPAT1   (1L << 0)
#define ATA_IF_NOTCOMPAT2   (1L << 2)
#define id_byte(n)   (&tmp_buf[2 * (n)])
#define id_word(n)
#define id_longword(n)
#define BUFSIZE   CD_SECTOR_SIZE
#define DMAERR(msg)
#define STSTR(a)   if (status & STATUS_ ## a) { strcat(str, #a); strcat(str, " "); }
#define ERRSTR(a)   if (e & ERROR_ ## a) { strcat(str, #a); strcat(str, " "); }

Functions

FORWARD _PROTOTYPE (void init_params,(void))
FORWARD _PROTOTYPE (void init_drive,(struct wini *w, int base_cmd, int base_ctl, int base_dma, int irq, int ack, int hook, int drive))
FORWARD _PROTOTYPE (void init_params_pci,(int))
FORWARD _PROTOTYPE (int w_do_open,(struct driver *dp, message *m_ptr))
FORWARD _PROTOTYPE (struct device *w_prepare,(int dev))
FORWARD _PROTOTYPE (int w_identify,(void))
FORWARD _PROTOTYPE (char *w_name,(void))
FORWARD _PROTOTYPE (int w_transfer,(int proc_nr, int opcode, u64_t position, iovec_t *iov, unsigned nr_req))
FORWARD _PROTOTYPE (int com_out,(struct command *cmd))
FORWARD _PROTOTYPE (void setup_dma,(unsigned *sizep, int proc_nr, iovec_t *iov, size_t addr_offset, int do_write, int *do_copyoutp))
FORWARD _PROTOTYPE (void ack_irqs,(unsigned int))
FORWARD _PROTOTYPE (int w_waitfor,(int mask, int value))
FORWARD _PROTOTYPE (void w_geometry,(struct partition *entry))
FORWARD _PROTOTYPE (int atapi_sendpacket,(u8_t *packet, unsigned cnt, int do_dma))
FORWARD _PROTOTYPE (int atapi_intr_wait,(int dma, size_t max))
FORWARD _PROTOTYPE (int at_voutb,(int line, pvb_pair_t *, int n))
FORWARD _PROTOTYPE (int at_out,(int line, u32_t port, u32_t value, char *typename, int type))
FORWARD _PROTOTYPE (int at_in,(int line, u32_t port, u32_t *value, char *typename, int type))
FORWARD _PROTOTYPE (int sef_cb_init_fresh,(int type, sef_init_info_t *info))
EXTERN _PROTOTYPE (void sef_cb_lu_prepare,(int state))
EXTERN _PROTOTYPE (int sef_cb_lu_state_isvalid,(int state))
PUBLIC int main (int argc, char *argv[])
PRIVATE void sef_local_startup ()
PRIVATE int sef_cb_init_fresh (int type, sef_init_info_t *info)
PRIVATE void init_params ()
PRIVATE void init_drive (struct wini *w, int base_cmd, int base_ctl, int base_dma, int irq, int ack, int hook, int drive)
PRIVATE void init_params_pci (int skip)
PRIVATE int w_do_open (struct driver *dp, message *m_ptr)
PRIVATE struct devicew_prepare (int device)
void check_dma (struct wini *wn)
PRIVATE int w_identify ()
PRIVATE char * w_name ()
PRIVATE int w_io_test (void)
PRIVATE int w_specify ()
PRIVATE int do_transfer (struct wini *wn, unsigned int precomp, unsigned int count, unsigned int sector, unsigned int opcode, int do_dma)
void stop_dma (struct wini *wn)
void start_dma (struct wini *wn, int do_write)
int error_dma (struct wini *wn)
PRIVATE int w_transfer (int proc_nr, int opcode, u64_t position, iovec_t *iov, unsigned nr_req)
PRIVATE int com_out (struct command *cmd)
PRIVATE int com_out_ext (struct command *cmd)
PRIVATE void setup_dma (unsigned *sizep, int proc_nr, iovec_t *iov, size_t addr_offset, int do_write, int *do_copyoutp)
PRIVATE void w_need_reset ()
PRIVATE int w_do_close (struct driver *dp, message *m_ptr)
PRIVATE int com_simple (struct command *cmd)
PRIVATE void w_timeout (void)
PRIVATE int w_reset ()
PRIVATE void w_intr_wait ()
PRIVATE int at_intr_wait ()
PRIVATE int w_waitfor (int mask, int value)
PRIVATE int w_waitfor_dma (int mask, int value)
PRIVATE void w_geometry (struct partition *entry)
PRIVATE int atapi_open ()
PRIVATE void atapi_close ()
void sense_request (void)
PRIVATE int atapi_transfer (int proc_nr, int opcode, u64_t position, iovec_t *iov, unsigned nr_req)
PRIVATE int atapi_sendpacket (u8_t *packet, unsigned cnt, int do_dma)
PRIVATE int w_other (struct driver *dr, message *m)
PRIVATE int w_hw_int (struct driver *dr, message *m)
PRIVATE void ack_irqs (unsigned int irqs)
char * strstatus (int status)
char * strerr (int e)
PRIVATE int atapi_intr_wait (int do_dma, size_t max)
PRIVATE int at_voutb (int line, pvb_pair_t *pvb, int n)
PRIVATE int at_vinb (int line, pvb_pair_t *pvb, int n)
PRIVATE int at_out (int line, u32_t port, u32_t value, char *typename, int type)
PRIVATE int at_in (int line, u32_t port, u32_t *value, char *typename, int type)

Variables

int timeout_ticks = DEF_TIMEOUT_TICKS
int max_errors = MAX_ERRORS
long w_standard_timeouts = 0
long w_pci_debug = 0
long w_instance = 0
long disable_dma = 0
long atapi_debug = 0
long w_identify_wakeup_ticks
long wakeup_ticks
long w_atapi_dma
int w_testing = 0
int w_silent = 0
int w_next_drive = 0
u32_t system_hz
PRIVATE struct winiw_wn [MAX_DRIVES]
PRIVATE int w_device = -1
PRIVATE int w_controller = -1
PRIVATE int w_major = -1
PRIVATE int win_tasknr
PUBLIC int w_command
PRIVATE u8_t w_byteval
PRIVATE int w_drive
PRIVATE struct devicew_dv
PRIVATE char * dma_buf
PRIVATE phys_bytes dma_buf_phys
PRIVATE struct prdteprdt
PRIVATE phys_bytes prdt_phys
struct {
   u16_t   vendor
   u16_t   device
raid_table []
PRIVATE struct driver w_dtab


Define Documentation

#define ATA_DMA_BUF_SIZE   (ATA_DMA_SECTORS*SECTOR_SIZE)

Definition at line 102 of file at_wini.c.

#define ATA_DMA_SECTORS   64

Definition at line 101 of file at_wini.c.

#define ATA_IF_NOTCOMPAT1   (1L << 0)

Definition at line 401 of file at_wini.c.

#define ATA_IF_NOTCOMPAT2   (1L << 2)

Definition at line 402 of file at_wini.c.

#define BUFSIZE   CD_SECTOR_SIZE

#define DMAERR ( msg   ) 

Value:

printf("at_wini%d: bad DMA: %s. Disabling DMA for drive %d.\n", \
                w_instance, msg, wn - wini);                            \
        printf("at_wini%d: workaround: set %s=1 in boot monitor.\n", \
                w_instance, NO_DMA_VAR); \
        return 1;       \

#define ERRSTR ( a   )     if (e & ERROR_ ## a) { strcat(str, #a); strcat(str, " "); }

Definition at line 2457 of file at_wini.c.

#define id_byte ( n   )     (&tmp_buf[2 * (n)])

Definition at line 690 of file at_wini.c.

#define id_longword ( n   ) 

Value:

(((u32_t) id_byte(n)[0] <<  0) \
                        |((u32_t) id_byte(n)[1] <<  8) \
                        |((u32_t) id_byte(n)[2] << 16) \
                        |((u32_t) id_byte(n)[3] << 24))

Definition at line 693 of file at_wini.c.

#define id_word ( n   ) 

Value:

(((u16_t) id_byte(n)[0] <<  0) \
                        |((u16_t) id_byte(n)[1] <<  8))

Definition at line 691 of file at_wini.c.

#define N_PRDTE   1024

Definition at line 107 of file at_wini.c.

#define PRDT_BYTES   (sizeof(struct prdte) * N_PRDTE)

Definition at line 117 of file at_wini.c.

#define PRDTE_FL_EOT   0x80

Definition at line 121 of file at_wini.c.

#define STSTR ( a   )     if (status & STATUS_ ## a) { strcat(str, #a); strcat(str, " "); }

Definition at line 2456 of file at_wini.c.

#define sys_inb ( p,
 )     at_in(__LINE__, (p), (v), "inb", _DIO_BYTE)

Definition at line 193 of file at_wini.c.

#define sys_inl ( p,
 )     at_in(__LINE__, (p), (v), "inl", _DIO_LONG)

Definition at line 197 of file at_wini.c.

#define sys_inw ( p,
 )     at_in(__LINE__, (p), (v), "inw", _DIO_WORD)

Definition at line 195 of file at_wini.c.

#define sys_outb ( p,
 )     at_out(__LINE__, (p), (v), "outb", _DIO_BYTE)

Definition at line 192 of file at_wini.c.

#define sys_outl ( p,
 )     at_out(__LINE__, (p), (v), "outl", _DIO_LONG)

Definition at line 196 of file at_wini.c.

#define sys_outw ( p,
 )     at_out(__LINE__, (p), (v), "outw", _DIO_WORD)

Definition at line 194 of file at_wini.c.

#define sys_vinb ( in,
n   )     at_vinb(__LINE__, (in), (n))

Definition at line 177 of file at_wini.c.

#define sys_voutb ( out,
n   )     at_voutb(__LINE__, (out), (n))

Definition at line 175 of file at_wini.c.


Function Documentation

EXTERN _PROTOTYPE ( int  sef_cb_lu_state_isvalid,
(int state  
)

EXTERN _PROTOTYPE ( void  sef_cb_lu_prepare,
(int state  
)

FORWARD _PROTOTYPE ( int  sef_cb_init_fresh,
(int type, sef_init_info_t *info  
)

FORWARD _PROTOTYPE ( int  at_in,
(int line, u32_t port, u32_t *value, char *typename, int type  
)

FORWARD _PROTOTYPE ( int  at_out,
(int line, u32_t port, u32_t value, char *typename, int type  
)

FORWARD _PROTOTYPE ( int  at_voutb,
(int line, pvb_pair_t *, int n  
)

FORWARD _PROTOTYPE ( int  atapi_intr_wait,
(int dma, size_t max)   
)

FORWARD _PROTOTYPE ( int  atapi_sendpacket,
(u8_t *packet, unsigned cnt, int do_dma)   
)

FORWARD _PROTOTYPE ( void  w_geometry,
(struct partition *entry  
)

FORWARD _PROTOTYPE ( int  w_waitfor,
(int mask, int value  
)

FORWARD _PROTOTYPE ( void  ack_irqs,
(unsigned int)   
)

FORWARD _PROTOTYPE ( void  setup_dma,
(unsigned *sizep, int proc_nr, iovec_t *iov, size_t addr_offset, int do_write, int *do_copyoutp)   
)

FORWARD _PROTOTYPE ( int  com_out,
(struct command *cmd  
)

FORWARD _PROTOTYPE ( int  w_transfer,
(int proc_nr, int opcode, u64_t position, iovec_t *iov, unsigned nr_req)   
)

FORWARD _PROTOTYPE ( char *  w_name,
(void)   
)

FORWARD _PROTOTYPE ( int  w_identify,
(void)   
)

FORWARD _PROTOTYPE ( struct device w_prepare,
(int dev  
)

FORWARD _PROTOTYPE ( int  w_do_open,
(struct driver *dp, message *m_ptr)   
)

FORWARD _PROTOTYPE ( void  init_params_pci,
(int)   
)

FORWARD _PROTOTYPE ( void  init_drive,
(struct wini *w, int base_cmd, int base_ctl, int base_dma, int irq, int ack, int hook, int drive)   
)

FORWARD _PROTOTYPE ( void  init_params,
(void)   
)

PRIVATE void ack_irqs ( unsigned int  irqs  ) 

Definition at line 2429 of file at_wini.c.

PRIVATE int at_in ( int  line,
u32_t  port,
u32_t value,
char *  typename,
int  type 
)

Definition at line 2601 of file at_wini.c.

PRIVATE int at_intr_wait (  ) 

Definition at line 1938 of file at_wini.c.

PRIVATE int at_out ( int  line,
u32_t  port,
u32_t  value,
char *  typename,
int  type 
)

Definition at line 2588 of file at_wini.c.

PRIVATE int at_vinb ( int  line,
pvb_pair_t pvb,
int  n 
)

Definition at line 2577 of file at_wini.c.

PRIVATE int at_voutb ( int  line,
pvb_pair_t pvb,
int  n 
)

Definition at line 2566 of file at_wini.c.

PRIVATE void atapi_close (  ) 

Definition at line 2056 of file at_wini.c.

PRIVATE int atapi_intr_wait ( int  do_dma,
size_t  max 
)

Definition at line 2493 of file at_wini.c.

PRIVATE int atapi_open (  ) 

Definition at line 2043 of file at_wini.c.

PRIVATE int atapi_sendpacket ( u8_t packet,
unsigned  cnt,
int  do_dma 
)

Definition at line 2287 of file at_wini.c.

PRIVATE int atapi_transfer ( int  proc_nr,
int  opcode,
u64_t  position,
iovec_t iov,
unsigned  nr_req 
)

Definition at line 2094 of file at_wini.c.

void check_dma ( struct wini wn  ) 

Definition at line 702 of file at_wini.c.

PRIVATE int com_out ( struct command cmd  ) 

Definition at line 1417 of file at_wini.c.

PRIVATE int com_out_ext ( struct command cmd  ) 

Definition at line 1468 of file at_wini.c.

PRIVATE int com_simple ( struct command cmd  ) 

Definition at line 1785 of file at_wini.c.

PRIVATE int do_transfer ( struct wini wn,
unsigned int  precomp,
unsigned int  count,
unsigned int  sector,
unsigned int  opcode,
int  do_dma 
)

Definition at line 1051 of file at_wini.c.

int error_dma ( struct wini wn  ) 

Definition at line 1149 of file at_wini.c.

PRIVATE void init_drive ( struct wini w,
int  base_cmd,
int  base_ctl,
int  base_dma,
int  irq,
int  ack,
int  hook,
int  drive 
)

Definition at line 407 of file at_wini.c.

PRIVATE void init_params (  ) 

Definition at line 289 of file at_wini.c.

PRIVATE void init_params_pci ( int  skip  ) 

Definition at line 430 of file at_wini.c.

PUBLIC int main ( int argc  ,
char *  argv[] 
)

Definition at line 227 of file at_wini.c.

PRIVATE int sef_cb_init_fresh ( int  type,
sef_init_info_t info 
)

Definition at line 261 of file at_wini.c.

PRIVATE void sef_local_startup ( void   ) 

Definition at line 242 of file at_wini.c.

void sense_request ( void   ) 

Definition at line 2061 of file at_wini.c.

PRIVATE void setup_dma ( unsigned *  sizep,
int  proc_nr,
iovec_t iov,
size_t  addr_offset,
int  do_write,
int *  do_copyoutp 
)

Definition at line 1522 of file at_wini.c.

void start_dma ( struct wini wn,
int  do_write 
)

Definition at line 1133 of file at_wini.c.

void stop_dma ( struct wini wn  ) 

Definition at line 1124 of file at_wini.c.

char* strerr ( int  e  ) 

Definition at line 2473 of file at_wini.c.

char* strstatus ( int  status  ) 

Definition at line 2458 of file at_wini.c.

PRIVATE int w_do_close ( struct driver dp,
message m_ptr 
)

Definition at line 1768 of file at_wini.c.

PRIVATE int w_do_open ( struct driver dp,
message m_ptr 
)

Definition at line 604 of file at_wini.c.

PRIVATE void w_geometry ( struct partition entry  ) 

Definition at line 2023 of file at_wini.c.

PRIVATE int w_hw_int ( struct driver dr,
message m 
)

Definition at line 2415 of file at_wini.c.

PRIVATE int w_identify (  ) 

Definition at line 787 of file at_wini.c.

PRIVATE void w_intr_wait (  ) 

Definition at line 1881 of file at_wini.c.

PRIVATE int w_io_test ( void   ) 

Definition at line 952 of file at_wini.c.

PRIVATE char* w_name (  ) 

Definition at line 939 of file at_wini.c.

PRIVATE void w_need_reset (  ) 

Definition at line 1751 of file at_wini.c.

PRIVATE int w_other ( struct driver dr,
message m 
)

Definition at line 2350 of file at_wini.c.

PRIVATE struct device* w_prepare ( int  device  )  [read]

Definition at line 669 of file at_wini.c.

PRIVATE int w_reset (  ) 

Definition at line 1834 of file at_wini.c.

PRIVATE int w_specify (  ) 

Definition at line 1012 of file at_wini.c.

PRIVATE void w_timeout ( void   ) 

Definition at line 1801 of file at_wini.c.

PRIVATE int w_transfer ( int  proc_nr,
int  opcode,
u64_t  position,
iovec_t iov,
unsigned  nr_req 
)

Definition at line 1184 of file at_wini.c.

PRIVATE int w_waitfor ( int  mask,
int  value 
)

Definition at line 1963 of file at_wini.c.

PRIVATE int w_waitfor_dma ( int  mask,
int  value 
)

Definition at line 1994 of file at_wini.c.


Variable Documentation

long atapi_debug = 0

Definition at line 48 of file at_wini.c.

Definition at line 127 of file at_wini.c.

long disable_dma = 0

Definition at line 48 of file at_wini.c.

PRIVATE char* dma_buf

Definition at line 104 of file at_wini.c.

Definition at line 105 of file at_wini.c.

int max_errors = MAX_ERRORS

Definition at line 46 of file at_wini.c.

PRIVATE struct prdte* prdt

Definition at line 118 of file at_wini.c.

Definition at line 119 of file at_wini.c.

PRIVATE { ... } raid_table[]

Definition at line 55 of file at_wini.c.

int timeout_ticks = DEF_TIMEOUT_TICKS

Definition at line 46 of file at_wini.c.

Definition at line 126 of file at_wini.c.

Definition at line 48 of file at_wini.c.

PRIVATE u8_t w_byteval

Definition at line 93 of file at_wini.c.

PUBLIC int w_command

Definition at line 92 of file at_wini.c.

PRIVATE int w_controller = -1

Definition at line 88 of file at_wini.c.

PRIVATE int w_device = -1

Definition at line 87 of file at_wini.c.

PRIVATE int w_drive

Definition at line 94 of file at_wini.c.

PRIVATE struct driver w_dtab

PRIVATE struct device* w_dv

Definition at line 96 of file at_wini.c.

Definition at line 48 of file at_wini.c.

long w_instance = 0

Definition at line 47 of file at_wini.c.

PRIVATE int w_major = -1

Definition at line 89 of file at_wini.c.

int w_next_drive = 0

Definition at line 53 of file at_wini.c.

long w_pci_debug = 0

Definition at line 47 of file at_wini.c.

int w_silent = 0

Definition at line 51 of file at_wini.c.

Definition at line 47 of file at_wini.c.

int w_testing = 0

Definition at line 51 of file at_wini.c.

PRIVATE struct wini * w_wn[MAX_DRIVES]

Definition at line 48 of file at_wini.c.

PRIVATE int win_tasknr

Definition at line 91 of file at_wini.c.


Generated on Tue Mar 9 04:36:45 2010 for Minix by  doxygen 1.5.8