//***************************************************************************
-struct ppc_storage {
- u8 ppc_flags;
- u8 cur_ctrl; // current control port contents
-};
+#define CUR_CTRL (((u8 *)&pi->private)[0])
+#define PPC_FLAGS (((u8 *)&pi->private)[1])
//***************************************************************************
static int ppc6_select(struct pi_adapter *pi)
{
- struct ppc_storage *ppc = (void *)(pi->private);
u8 i, j, k;
i = inb(pi->port + 1);
pi->saved_r2 = inb(pi->port + 2) & 0x5F; // readback ctrl
- ppc->cur_ctrl = pi->saved_r2;
+ CUR_CTRL = pi->saved_r2;
- ppc->cur_ctrl |= port_sel;
+ CUR_CTRL |= port_sel;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
if (pi->saved_r0 == 'b')
outb('x', pi->port);
outb(pi->unit, pi->port);
outb(~pi->unit, pi->port);
- ppc->cur_ctrl &= ~port_sel;
+ CUR_CTRL &= ~port_sel;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
- ppc->cur_ctrl = (ppc->cur_ctrl & port_int) | port_init;
+ CUR_CTRL = (CUR_CTRL & port_int) | port_init;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
i = mode_map[pi->mode] & 0x0C;
outb(i, pi->port);
- ppc->cur_ctrl |= port_sel;
+ CUR_CTRL |= port_sel;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
// DELAY
- ppc->cur_ctrl |= port_afd;
+ CUR_CTRL |= port_afd;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
j = ((i & 0x08) << 4) | ((i & 0x07) << 3);
if (j == k)
{
- ppc->cur_ctrl &= ~port_afd;
+ CUR_CTRL &= ~port_afd;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
k = (inb(pi->port + 1) & 0xB8) ^ 0xB8;
if (j == k)
{
if (i & 4) // EPP
- ppc->cur_ctrl &= ~(port_sel | port_init);
+ CUR_CTRL &= ~(port_sel | port_init);
else // PPC/ECP
- ppc->cur_ctrl &= ~port_sel;
+ CUR_CTRL &= ~port_sel;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
return(1);
}
static void ppc6_deselect(struct pi_adapter *pi)
{
- struct ppc_storage *ppc = (void *)(pi->private);
if (mode_map[pi->mode] & 4) // EPP
- ppc->cur_ctrl |= port_init;
+ CUR_CTRL |= port_init;
else // PPC/ECP
- ppc->cur_ctrl |= port_sel;
+ CUR_CTRL |= port_sel;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
outb(pi->saved_r0, pi->port);
static void ppc6_send_cmd(struct pi_adapter *pi, u8 cmd)
{
- struct ppc_storage *ppc = (void *)(pi->private);
switch (mode_map[pi->mode])
{
case PPCMODE_UNI_SW :
{
outb(cmd, pi->port);
- ppc->cur_ctrl ^= cmd_stb;
+ CUR_CTRL ^= cmd_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
static void ppc6_wr_data_byte(struct pi_adapter *pi, u8 data)
{
- struct ppc_storage *ppc = (void *)(pi->private);
switch (mode_map[pi->mode])
{
case PPCMODE_UNI_SW :
{
outb(data, pi->port);
- ppc->cur_ctrl ^= data_stb;
+ CUR_CTRL ^= data_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
static u8 ppc6_rd_data_byte(struct pi_adapter *pi)
{
- struct ppc_storage *ppc = (void *)(pi->private);
u8 data = 0;
switch (mode_map[pi->mode])
case PPCMODE_UNI_SW :
case PPCMODE_UNI_FW :
{
- ppc->cur_ctrl = (ppc->cur_ctrl & ~port_stb) ^ data_stb;
+ CUR_CTRL = (CUR_CTRL & ~port_stb) ^ data_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
// DELAY
data = ((data & 0x80) >> 1) | ((data & 0x38) >> 3);
- ppc->cur_ctrl |= port_stb;
+ CUR_CTRL |= port_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
// DELAY
case PPCMODE_BI_SW :
case PPCMODE_BI_FW :
{
- ppc->cur_ctrl |= port_dir;
+ CUR_CTRL |= port_dir;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
- ppc->cur_ctrl = (ppc->cur_ctrl | port_stb) ^ data_stb;
+ CUR_CTRL = (CUR_CTRL | port_stb) ^ data_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
data = inb(pi->port);
- ppc->cur_ctrl &= ~port_stb;
+ CUR_CTRL &= ~port_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
- ppc->cur_ctrl &= ~port_dir;
+ CUR_CTRL &= ~port_dir;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
case PPCMODE_EPP_WORD :
case PPCMODE_EPP_DWORD :
{
- outb((ppc->cur_ctrl | port_dir), pi->port + 2);
+ outb((CUR_CTRL | port_dir), pi->port + 2);
data = inb(pi->port + 4);
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
static void ppc6_rd_data_blk(struct pi_adapter *pi, u8 *data, long count)
{
- struct ppc_storage *ppc = (void *)(pi->private);
switch (mode_map[pi->mode])
{
case PPCMODE_UNI_SW :
{
u8 d;
- ppc->cur_ctrl = (ppc->cur_ctrl & ~port_stb) ^ data_stb;
+ CUR_CTRL = (CUR_CTRL & ~port_stb) ^ data_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
// DELAY
d = ((d & 0x80) >> 1) | ((d & 0x38) >> 3);
- ppc->cur_ctrl |= port_stb;
+ CUR_CTRL |= port_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
// DELAY
case PPCMODE_BI_SW :
case PPCMODE_BI_FW :
{
- ppc->cur_ctrl |= port_dir;
+ CUR_CTRL |= port_dir;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
- ppc->cur_ctrl |= port_stb;
+ CUR_CTRL |= port_stb;
while(count)
{
- ppc->cur_ctrl ^= data_stb;
+ CUR_CTRL ^= data_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
*data++ = inb(pi->port);
count--;
}
- ppc->cur_ctrl &= ~port_stb;
+ CUR_CTRL &= ~port_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
- ppc->cur_ctrl &= ~port_dir;
+ CUR_CTRL &= ~port_dir;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
case PPCMODE_EPP_BYTE :
{
- outb((ppc->cur_ctrl | port_dir), pi->port + 2);
+ outb((CUR_CTRL | port_dir), pi->port + 2);
// DELAY
count--;
}
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
case PPCMODE_EPP_WORD :
{
- outb((ppc->cur_ctrl | port_dir), pi->port + 2);
+ outb((CUR_CTRL | port_dir), pi->port + 2);
// DELAY
count--;
}
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
case PPCMODE_EPP_DWORD :
{
- outb((ppc->cur_ctrl | port_dir), pi->port + 2);
+ outb((CUR_CTRL | port_dir), pi->port + 2);
// DELAY
count--;
}
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
break;
}
static void ppc6_wait_for_fifo(struct pi_adapter *pi)
{
- struct ppc_storage *ppc = (void *)(pi->private);
int i;
- if (ppc->ppc_flags & fifo_wait)
+ if (PPC_FLAGS & fifo_wait)
{
for(i=0; i<20; i++)
inb(pi->port + 1);
static void ppc6_wr_data_blk(struct pi_adapter *pi, u8 *data, long count)
{
- struct ppc_storage *ppc = (void *)(pi->private);
switch (mode_map[pi->mode])
{
case PPCMODE_UNI_SW :
{
outb(*data++, pi->port);
- ppc->cur_ctrl ^= data_stb;
+ CUR_CTRL ^= data_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
}
break;
ppc6_send_cmd(pi, CMD_PREFIX_SET | PREFIX_FASTWR);
- ppc->cur_ctrl |= port_stb;
+ CUR_CTRL |= port_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
last = *data;
if (this == last)
{
- ppc->cur_ctrl ^= data_stb;
+ CUR_CTRL ^= data_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
}
else
{
}
}
- ppc->cur_ctrl &= ~port_stb;
+ CUR_CTRL &= ~port_stb;
- outb(ppc->cur_ctrl, pi->port + 2);
+ outb(CUR_CTRL, pi->port + 2);
ppc6_send_cmd(pi, CMD_PREFIX_RESET | PREFIX_FASTWR);
static int ppc6_open(struct pi_adapter *pi)
{
- struct ppc_storage *ppc = (void *)(pi->private);
int ret;
ret = ppc6_select(pi);
if (ret == 0)
return(ret);
- ppc->ppc_flags &= ~fifo_wait;
+ PPC_FLAGS &= ~fifo_wait;
ppc6_send_cmd(pi, ACCESS_REG | ACCESS_WRITE | REG_RAMSIZE);
ppc6_wr_data_byte(pi, RAMSIZE_128K);
ppc6_send_cmd(pi, ACCESS_REG | ACCESS_READ | REG_VERSION);
if ((ppc6_rd_data_byte(pi) & 0x3F) == 0x0C)
- ppc->ppc_flags |= fifo_wait;
+ PPC_FLAGS |= fifo_wait;
return(ret);
}