Lines Matching refs:ppc

104 static int ppc6_select(Interface *ppc);
105 static void ppc6_deselect(Interface *ppc);
106 static void ppc6_send_cmd(Interface *ppc, u8 cmd);
107 static void ppc6_wr_data_byte(Interface *ppc, u8 data);
108 static u8 ppc6_rd_data_byte(Interface *ppc);
109 static u8 ppc6_rd_port(Interface *ppc, u8 port);
110 static void ppc6_wr_port(Interface *ppc, u8 port, u8 data);
111 static void ppc6_rd_data_blk(Interface *ppc, u8 *data, long count);
112 static void ppc6_wait_for_fifo(Interface *ppc);
113 static void ppc6_wr_data_blk(Interface *ppc, u8 *data, long count);
114 static void ppc6_rd_port16_blk(Interface *ppc, u8 port, u8 *data, long length);
115 static void ppc6_wr_port16_blk(Interface *ppc, u8 port, u8 *data, long length);
116 static void ppc6_wr_extout(Interface *ppc, u8 regdata);
117 static int ppc6_open(Interface *ppc);
118 static void ppc6_close(Interface *ppc);
122 static int ppc6_select(Interface *ppc) in ppc6_select() argument
126 i = inb(ppc->lpt_addr + 1); in ppc6_select()
129 outb(i, ppc->lpt_addr + 1); in ppc6_select()
131 ppc->org_data = inb(ppc->lpt_addr); in ppc6_select()
133 ppc->org_ctrl = inb(ppc->lpt_addr + 2) & 0x5F; // readback ctrl in ppc6_select()
135 ppc->cur_ctrl = ppc->org_ctrl; in ppc6_select()
137 ppc->cur_ctrl |= port_sel; in ppc6_select()
139 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_select()
141 if (ppc->org_data == 'b') in ppc6_select()
142 outb('x', ppc->lpt_addr); in ppc6_select()
144 outb('b', ppc->lpt_addr); in ppc6_select()
145 outb('p', ppc->lpt_addr); in ppc6_select()
146 outb(ppc->ppc_id, ppc->lpt_addr); in ppc6_select()
147 outb(~ppc->ppc_id,ppc->lpt_addr); in ppc6_select()
149 ppc->cur_ctrl &= ~port_sel; in ppc6_select()
151 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_select()
153 ppc->cur_ctrl = (ppc->cur_ctrl & port_int) | port_init; in ppc6_select()
155 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_select()
157 i = ppc->mode & 0x0C; in ppc6_select()
160 i = (ppc->mode & 2) | 1; in ppc6_select()
162 outb(i, ppc->lpt_addr); in ppc6_select()
164 ppc->cur_ctrl |= port_sel; in ppc6_select()
166 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_select()
170 ppc->cur_ctrl |= port_afd; in ppc6_select()
172 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_select()
176 k = inb(ppc->lpt_addr + 1) & 0xB8; in ppc6_select()
180 ppc->cur_ctrl &= ~port_afd; in ppc6_select()
182 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_select()
184 k = (inb(ppc->lpt_addr + 1) & 0xB8) ^ 0xB8; in ppc6_select()
189 ppc->cur_ctrl &= ~(port_sel | port_init); in ppc6_select()
191 ppc->cur_ctrl &= ~port_sel; in ppc6_select()
193 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_select()
199 outb(ppc->org_ctrl, ppc->lpt_addr + 2); in ppc6_select()
201 outb(ppc->org_data, ppc->lpt_addr); in ppc6_select()
208 static void ppc6_deselect(Interface *ppc) in ppc6_deselect() argument
210 if (ppc->mode & 4) // EPP in ppc6_deselect()
211 ppc->cur_ctrl |= port_init; in ppc6_deselect()
213 ppc->cur_ctrl |= port_sel; in ppc6_deselect()
215 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_deselect()
217 outb(ppc->org_data, ppc->lpt_addr); in ppc6_deselect()
219 outb((ppc->org_ctrl | port_sel), ppc->lpt_addr + 2); in ppc6_deselect()
221 outb(ppc->org_ctrl, ppc->lpt_addr + 2); in ppc6_deselect()
226 static void ppc6_send_cmd(Interface *ppc, u8 cmd) in ppc6_send_cmd() argument
228 switch(ppc->mode) in ppc6_send_cmd()
235 outb(cmd, ppc->lpt_addr); in ppc6_send_cmd()
237 ppc->cur_ctrl ^= cmd_stb; in ppc6_send_cmd()
239 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_send_cmd()
248 outb(cmd, ppc->lpt_addr + 3); in ppc6_send_cmd()
257 static void ppc6_wr_data_byte(Interface *ppc, u8 data) in ppc6_wr_data_byte() argument
259 switch(ppc->mode) in ppc6_wr_data_byte()
266 outb(data, ppc->lpt_addr); in ppc6_wr_data_byte()
268 ppc->cur_ctrl ^= data_stb; in ppc6_wr_data_byte()
270 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_wr_data_byte()
279 outb(data, ppc->lpt_addr + 4); in ppc6_wr_data_byte()
288 static u8 ppc6_rd_data_byte(Interface *ppc) in ppc6_rd_data_byte() argument
292 switch(ppc->mode) in ppc6_rd_data_byte()
297 ppc->cur_ctrl = (ppc->cur_ctrl & ~port_stb) ^ data_stb; in ppc6_rd_data_byte()
299 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_byte()
303 data = inb(ppc->lpt_addr + 1); in ppc6_rd_data_byte()
307 ppc->cur_ctrl |= port_stb; in ppc6_rd_data_byte()
309 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_byte()
313 data |= inb(ppc->lpt_addr + 1) & 0xB8; in ppc6_rd_data_byte()
321 ppc->cur_ctrl |= port_dir; in ppc6_rd_data_byte()
323 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_byte()
325 ppc->cur_ctrl = (ppc->cur_ctrl | port_stb) ^ data_stb; in ppc6_rd_data_byte()
327 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_byte()
329 data = inb(ppc->lpt_addr); in ppc6_rd_data_byte()
331 ppc->cur_ctrl &= ~port_stb; in ppc6_rd_data_byte()
333 outb(ppc->cur_ctrl,ppc->lpt_addr + 2); in ppc6_rd_data_byte()
335 ppc->cur_ctrl &= ~port_dir; in ppc6_rd_data_byte()
337 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_byte()
346 outb((ppc->cur_ctrl | port_dir),ppc->lpt_addr + 2); in ppc6_rd_data_byte()
348 data = inb(ppc->lpt_addr + 4); in ppc6_rd_data_byte()
350 outb(ppc->cur_ctrl,ppc->lpt_addr + 2); in ppc6_rd_data_byte()
361 static u8 ppc6_rd_port(Interface *ppc, u8 port) in ppc6_rd_port() argument
363 ppc6_send_cmd(ppc,(u8)(port | ACCESS_PORT | ACCESS_READ)); in ppc6_rd_port()
365 return(ppc6_rd_data_byte(ppc)); in ppc6_rd_port()
370 static void ppc6_wr_port(Interface *ppc, u8 port, u8 data) in ppc6_wr_port() argument
372 ppc6_send_cmd(ppc,(u8)(port | ACCESS_PORT | ACCESS_WRITE)); in ppc6_wr_port()
374 ppc6_wr_data_byte(ppc, data); in ppc6_wr_port()
379 static void ppc6_rd_data_blk(Interface *ppc, u8 *data, long count) in ppc6_rd_data_blk() argument
381 switch(ppc->mode) in ppc6_rd_data_blk()
390 ppc->cur_ctrl = (ppc->cur_ctrl & ~port_stb) ^ data_stb; in ppc6_rd_data_blk()
392 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
396 d = inb(ppc->lpt_addr + 1); in ppc6_rd_data_blk()
400 ppc->cur_ctrl |= port_stb; in ppc6_rd_data_blk()
402 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
406 d |= inb(ppc->lpt_addr + 1) & 0xB8; in ppc6_rd_data_blk()
418 ppc->cur_ctrl |= port_dir; in ppc6_rd_data_blk()
420 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
422 ppc->cur_ctrl |= port_stb; in ppc6_rd_data_blk()
426 ppc->cur_ctrl ^= data_stb; in ppc6_rd_data_blk()
428 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
430 *data++ = inb(ppc->lpt_addr); in ppc6_rd_data_blk()
434 ppc->cur_ctrl &= ~port_stb; in ppc6_rd_data_blk()
436 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
438 ppc->cur_ctrl &= ~port_dir; in ppc6_rd_data_blk()
440 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
447 outb((ppc->cur_ctrl | port_dir), ppc->lpt_addr + 2); in ppc6_rd_data_blk()
453 *data++ = inb(ppc->lpt_addr + 4); in ppc6_rd_data_blk()
457 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
464 outb((ppc->cur_ctrl | port_dir), ppc->lpt_addr + 2); in ppc6_rd_data_blk()
470 *((u16 *)data) = inw(ppc->lpt_addr + 4); in ppc6_rd_data_blk()
477 *data++ = inb(ppc->lpt_addr + 4); in ppc6_rd_data_blk()
481 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
488 outb((ppc->cur_ctrl | port_dir),ppc->lpt_addr + 2); in ppc6_rd_data_blk()
494 *((u32 *)data) = inl(ppc->lpt_addr + 4); in ppc6_rd_data_blk()
501 *data++ = inb(ppc->lpt_addr + 4); in ppc6_rd_data_blk()
505 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_rd_data_blk()
515 static void ppc6_wait_for_fifo(Interface *ppc) in ppc6_wait_for_fifo() argument
519 if (ppc->ppc_flags & fifo_wait) in ppc6_wait_for_fifo()
522 inb(ppc->lpt_addr + 1); in ppc6_wait_for_fifo()
528 static void ppc6_wr_data_blk(Interface *ppc, u8 *data, long count) in ppc6_wr_data_blk() argument
530 switch(ppc->mode) in ppc6_wr_data_blk()
537 outb(*data++, ppc->lpt_addr); in ppc6_wr_data_blk()
539 ppc->cur_ctrl ^= data_stb; in ppc6_wr_data_blk()
541 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_wr_data_blk()
552 ppc6_send_cmd(ppc,(CMD_PREFIX_SET | PREFIX_FASTWR)); in ppc6_wr_data_blk()
554 ppc->cur_ctrl |= port_stb; in ppc6_wr_data_blk()
556 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_wr_data_blk()
560 outb(last, ppc->lpt_addr); in ppc6_wr_data_blk()
569 ppc->cur_ctrl ^= data_stb; in ppc6_wr_data_blk()
571 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_wr_data_blk()
575 outb(this, ppc->lpt_addr); in ppc6_wr_data_blk()
581 ppc->cur_ctrl &= ~port_stb; in ppc6_wr_data_blk()
583 outb(ppc->cur_ctrl, ppc->lpt_addr + 2); in ppc6_wr_data_blk()
585 ppc6_send_cmd(ppc,(CMD_PREFIX_RESET | PREFIX_FASTWR)); in ppc6_wr_data_blk()
594 outb(*data++,ppc->lpt_addr + 4); in ppc6_wr_data_blk()
598 ppc6_wait_for_fifo(ppc); in ppc6_wr_data_blk()
607 outw(*((u16 *)data),ppc->lpt_addr + 4); in ppc6_wr_data_blk()
614 outb(*data++,ppc->lpt_addr + 4); in ppc6_wr_data_blk()
618 ppc6_wait_for_fifo(ppc); in ppc6_wr_data_blk()
627 outl(*((u32 *)data),ppc->lpt_addr + 4); in ppc6_wr_data_blk()
634 outb(*data++,ppc->lpt_addr + 4); in ppc6_wr_data_blk()
638 ppc6_wait_for_fifo(ppc); in ppc6_wr_data_blk()
647 static void ppc6_rd_port16_blk(Interface *ppc, u8 port, u8 *data, long length) in ppc6_rd_port16_blk() argument
651 ppc6_send_cmd(ppc, (REG_BLKSIZE | ACCESS_REG | ACCESS_WRITE)); in ppc6_rd_port16_blk()
652 ppc6_wr_data_byte(ppc,(u8)length); in ppc6_rd_port16_blk()
653 ppc6_wr_data_byte(ppc,(u8)(length >> 8)); in ppc6_rd_port16_blk()
654 ppc6_wr_data_byte(ppc,0); in ppc6_rd_port16_blk()
656 ppc6_send_cmd(ppc, (CMD_PREFIX_SET | PREFIX_IO16 | PREFIX_BLK)); in ppc6_rd_port16_blk()
658 ppc6_send_cmd(ppc, (u8)(port | ACCESS_PORT | ACCESS_READ)); in ppc6_rd_port16_blk()
660 ppc6_rd_data_blk(ppc, data, length); in ppc6_rd_port16_blk()
662 ppc6_send_cmd(ppc, (CMD_PREFIX_RESET | PREFIX_IO16 | PREFIX_BLK)); in ppc6_rd_port16_blk()
667 static void ppc6_wr_port16_blk(Interface *ppc, u8 port, u8 *data, long length) in ppc6_wr_port16_blk() argument
671 ppc6_send_cmd(ppc, (REG_BLKSIZE | ACCESS_REG | ACCESS_WRITE)); in ppc6_wr_port16_blk()
672 ppc6_wr_data_byte(ppc,(u8)length); in ppc6_wr_port16_blk()
673 ppc6_wr_data_byte(ppc,(u8)(length >> 8)); in ppc6_wr_port16_blk()
674 ppc6_wr_data_byte(ppc,0); in ppc6_wr_port16_blk()
676 ppc6_send_cmd(ppc, (CMD_PREFIX_SET | PREFIX_IO16 | PREFIX_BLK)); in ppc6_wr_port16_blk()
678 ppc6_send_cmd(ppc, (u8)(port | ACCESS_PORT | ACCESS_WRITE)); in ppc6_wr_port16_blk()
680 ppc6_wr_data_blk(ppc, data, length); in ppc6_wr_port16_blk()
682 ppc6_send_cmd(ppc, (CMD_PREFIX_RESET | PREFIX_IO16 | PREFIX_BLK)); in ppc6_wr_port16_blk()
687 static void ppc6_wr_extout(Interface *ppc, u8 regdata) in ppc6_wr_extout() argument
689 ppc6_send_cmd(ppc,(REG_VERSION | ACCESS_REG | ACCESS_WRITE)); in ppc6_wr_extout()
691 ppc6_wr_data_byte(ppc, (u8)((regdata & 0x03) << 6)); in ppc6_wr_extout()
696 static int ppc6_open(Interface *ppc) in ppc6_open() argument
700 ret = ppc6_select(ppc); in ppc6_open()
705 ppc->ppc_flags &= ~fifo_wait; in ppc6_open()
707 ppc6_send_cmd(ppc, (ACCESS_REG | ACCESS_WRITE | REG_RAMSIZE)); in ppc6_open()
708 ppc6_wr_data_byte(ppc, RAMSIZE_128K); in ppc6_open()
710 ppc6_send_cmd(ppc, (ACCESS_REG | ACCESS_READ | REG_VERSION)); in ppc6_open()
712 if ((ppc6_rd_data_byte(ppc) & 0x3F) == 0x0C) in ppc6_open()
713 ppc->ppc_flags |= fifo_wait; in ppc6_open()
720 static void ppc6_close(Interface *ppc) in ppc6_close() argument
722 ppc6_deselect(ppc); in ppc6_close()