Lines Matching full:pi

63 static void bpck6_send_cmd(struct pi_adapter *pi, u8 cmd)  in bpck6_send_cmd()  argument
65 switch (mode_map[pi->mode]) { in bpck6_send_cmd()
70 parport_write_data(pi->pardev->port, cmd); in bpck6_send_cmd()
71 parport_frob_control(pi->pardev->port, 0, PARPORT_CONTROL_AUTOFD); in bpck6_send_cmd()
76 pi->pardev->port->ops->epp_write_addr(pi->pardev->port, &cmd, 1, 0); in bpck6_send_cmd()
81 static u8 bpck6_rd_data_byte(struct pi_adapter *pi) in bpck6_rd_data_byte() argument
85 switch (mode_map[pi->mode]) { in bpck6_rd_data_byte()
88 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, in bpck6_rd_data_byte()
90 data = parport_read_status(pi->pardev->port); in bpck6_rd_data_byte()
92 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, in bpck6_rd_data_byte()
94 data |= parport_read_status(pi->pardev->port) & 0xB8; in bpck6_rd_data_byte()
98 parport_data_reverse(pi->pardev->port); in bpck6_rd_data_byte()
99 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, in bpck6_rd_data_byte()
101 data = parport_read_data(pi->pardev->port); in bpck6_rd_data_byte()
102 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, 0); in bpck6_rd_data_byte()
103 parport_data_forward(pi->pardev->port); in bpck6_rd_data_byte()
108 pi->pardev->port->ops->epp_read_data(pi->pardev->port, &data, 1, 0); in bpck6_rd_data_byte()
115 static void bpck6_wr_data_byte(struct pi_adapter *pi, u8 data) in bpck6_wr_data_byte() argument
117 switch (mode_map[pi->mode]) { in bpck6_wr_data_byte()
122 parport_write_data(pi->pardev->port, data); in bpck6_wr_data_byte()
123 parport_frob_control(pi->pardev->port, 0, PARPORT_CONTROL_INIT); in bpck6_wr_data_byte()
128 pi->pardev->port->ops->epp_write_data(pi->pardev->port, &data, 1, 0); in bpck6_wr_data_byte()
133 static int bpck6_read_regr(struct pi_adapter *pi, int cont, int reg) in bpck6_read_regr() argument
137 bpck6_send_cmd(pi, port | ACCESS_PORT | ACCESS_READ); in bpck6_read_regr()
138 return bpck6_rd_data_byte(pi); in bpck6_read_regr()
141 static void bpck6_write_regr(struct pi_adapter *pi, int cont, int reg, int val) in bpck6_write_regr() argument
145 bpck6_send_cmd(pi, port | ACCESS_PORT | ACCESS_WRITE); in bpck6_write_regr()
146 bpck6_wr_data_byte(pi, val); in bpck6_write_regr()
149 static void bpck6_wait_for_fifo(struct pi_adapter *pi) in bpck6_wait_for_fifo() argument
153 if (pi->private & fifo_wait) { in bpck6_wait_for_fifo()
155 parport_read_status(pi->pardev->port); in bpck6_wait_for_fifo()
159 static void bpck6_write_block(struct pi_adapter *pi, char *buf, int len) in bpck6_write_block() argument
163 bpck6_send_cmd(pi, REG_BLKSIZE | ACCESS_REG | ACCESS_WRITE); in bpck6_write_block()
164 bpck6_wr_data_byte(pi, (u8)len); in bpck6_write_block()
165 bpck6_wr_data_byte(pi, (u8)(len >> 8)); in bpck6_write_block()
166 bpck6_wr_data_byte(pi, 0); in bpck6_write_block()
168 bpck6_send_cmd(pi, CMD_PREFIX_SET | PREFIX_IO16 | PREFIX_BLK); in bpck6_write_block()
169 bpck6_send_cmd(pi, ATA_REG_DATA | ACCESS_PORT | ACCESS_WRITE); in bpck6_write_block()
171 switch (mode_map[pi->mode]) { in bpck6_write_block()
175 parport_write_data(pi->pardev->port, *buf++); in bpck6_write_block()
176 parport_frob_control(pi->pardev->port, 0, in bpck6_write_block()
182 bpck6_send_cmd(pi, CMD_PREFIX_SET | PREFIX_FASTWR); in bpck6_write_block()
184 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, in bpck6_write_block()
189 parport_write_data(pi->pardev->port, last); in bpck6_write_block()
196 parport_frob_control(pi->pardev->port, 0, in bpck6_write_block()
199 parport_write_data(pi->pardev->port, this); in bpck6_write_block()
204 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, in bpck6_write_block()
206 bpck6_send_cmd(pi, CMD_PREFIX_RESET | PREFIX_FASTWR); in bpck6_write_block()
209 pi->pardev->port->ops->epp_write_data(pi->pardev->port, buf, in bpck6_write_block()
211 bpck6_wait_for_fifo(pi); in bpck6_write_block()
214 pi->pardev->port->ops->epp_write_data(pi->pardev->port, buf, in bpck6_write_block()
216 bpck6_wait_for_fifo(pi); in bpck6_write_block()
219 pi->pardev->port->ops->epp_write_data(pi->pardev->port, buf, in bpck6_write_block()
221 bpck6_wait_for_fifo(pi); in bpck6_write_block()
225 bpck6_send_cmd(pi, CMD_PREFIX_RESET | PREFIX_IO16 | PREFIX_BLK); in bpck6_write_block()
228 static void bpck6_read_block(struct pi_adapter *pi, char *buf, int len) in bpck6_read_block() argument
230 bpck6_send_cmd(pi, REG_BLKSIZE | ACCESS_REG | ACCESS_WRITE); in bpck6_read_block()
231 bpck6_wr_data_byte(pi, (u8)len); in bpck6_read_block()
232 bpck6_wr_data_byte(pi, (u8)(len >> 8)); in bpck6_read_block()
233 bpck6_wr_data_byte(pi, 0); in bpck6_read_block()
235 bpck6_send_cmd(pi, CMD_PREFIX_SET | PREFIX_IO16 | PREFIX_BLK); in bpck6_read_block()
236 bpck6_send_cmd(pi, ATA_REG_DATA | ACCESS_PORT | ACCESS_READ); in bpck6_read_block()
238 switch (mode_map[pi->mode]) { in bpck6_read_block()
244 parport_frob_control(pi->pardev->port, in bpck6_read_block()
247 d = parport_read_status(pi->pardev->port); in bpck6_read_block()
249 parport_frob_control(pi->pardev->port, in bpck6_read_block()
252 d |= parport_read_status(pi->pardev->port) & 0xB8; in bpck6_read_block()
259 parport_data_reverse(pi->pardev->port); in bpck6_read_block()
261 parport_frob_control(pi->pardev->port, in bpck6_read_block()
264 *buf++ = parport_read_data(pi->pardev->port); in bpck6_read_block()
267 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_STROBE, in bpck6_read_block()
269 parport_data_forward(pi->pardev->port); in bpck6_read_block()
272 pi->pardev->port->ops->epp_read_data(pi->pardev->port, buf, len, in bpck6_read_block()
276 pi->pardev->port->ops->epp_read_data(pi->pardev->port, buf, len, in bpck6_read_block()
280 pi->pardev->port->ops->epp_read_data(pi->pardev->port, buf, len, in bpck6_read_block()
285 bpck6_send_cmd(pi, CMD_PREFIX_RESET | PREFIX_IO16 | PREFIX_BLK); in bpck6_read_block()
288 static int bpck6_open(struct pi_adapter *pi) in bpck6_open() argument
292 pi->saved_r0 = parport_read_data(pi->pardev->port); in bpck6_open()
293 pi->saved_r2 = parport_read_control(pi->pardev->port) & 0x5F; in bpck6_open()
295 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, in bpck6_open()
297 if (pi->saved_r0 == 'b') in bpck6_open()
298 parport_write_data(pi->pardev->port, 'x'); in bpck6_open()
299 parport_write_data(pi->pardev->port, 'b'); in bpck6_open()
300 parport_write_data(pi->pardev->port, 'p'); in bpck6_open()
301 parport_write_data(pi->pardev->port, pi->unit); in bpck6_open()
302 parport_write_data(pi->pardev->port, ~pi->unit); in bpck6_open()
304 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, 0); in bpck6_open()
305 parport_write_control(pi->pardev->port, PARPORT_CONTROL_INIT); in bpck6_open()
307 i = mode_map[pi->mode] & 0x0C; in bpck6_open()
309 i = (mode_map[pi->mode] & 2) | 1; in bpck6_open()
310 parport_write_data(pi->pardev->port, i); in bpck6_open()
312 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, in bpck6_open()
314 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD, in bpck6_open()
318 k = parport_read_status(pi->pardev->port) & 0xB8; in bpck6_open()
322 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_AUTOFD, 0); in bpck6_open()
323 k = (parport_read_status(pi->pardev->port) & 0xB8) ^ 0xB8; in bpck6_open()
329 parport_frob_control(pi->pardev->port, in bpck6_open()
333 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, 0); in bpck6_open()
336 pi->private = 0; in bpck6_open()
338 bpck6_send_cmd(pi, ACCESS_REG | ACCESS_WRITE | REG_RAMSIZE); in bpck6_open()
339 bpck6_wr_data_byte(pi, RAMSIZE_128K); in bpck6_open()
341 bpck6_send_cmd(pi, ACCESS_REG | ACCESS_READ | REG_VERSION); in bpck6_open()
342 if ((bpck6_rd_data_byte(pi) & 0x3F) == 0x0C) in bpck6_open()
343 pi->private |= fifo_wait; in bpck6_open()
348 parport_write_control(pi->pardev->port, pi->saved_r2); in bpck6_open()
349 parport_write_data(pi->pardev->port, pi->saved_r0); in bpck6_open()
354 static void bpck6_deselect(struct pi_adapter *pi) in bpck6_deselect() argument
356 if (mode_map[pi->mode] & 4) { in bpck6_deselect()
358 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_INIT, in bpck6_deselect()
362 parport_frob_control(pi->pardev->port, PARPORT_CONTROL_SELECT, in bpck6_deselect()
366 parport_write_data(pi->pardev->port, pi->saved_r0); in bpck6_deselect()
367 parport_write_control(pi->pardev->port, in bpck6_deselect()
368 pi->saved_r2 | PARPORT_CONTROL_SELECT); in bpck6_deselect()
369 parport_write_control(pi->pardev->port, pi->saved_r2); in bpck6_deselect()
372 static void bpck6_wr_extout(struct pi_adapter *pi, u8 regdata) in bpck6_wr_extout() argument
374 bpck6_send_cmd(pi, REG_VERSION | ACCESS_REG | ACCESS_WRITE); in bpck6_wr_extout()
375 bpck6_wr_data_byte(pi, (u8)((regdata & 0x03) << 6)); in bpck6_wr_extout()
378 static void bpck6_connect(struct pi_adapter *pi) in bpck6_connect() argument
380 dev_dbg(&pi->dev, "connect\n"); in bpck6_connect()
382 bpck6_open(pi); in bpck6_connect()
383 bpck6_wr_extout(pi, 0x3); in bpck6_connect()
386 static void bpck6_disconnect(struct pi_adapter *pi) in bpck6_disconnect() argument
388 dev_dbg(&pi->dev, "disconnect\n"); in bpck6_disconnect()
389 bpck6_wr_extout(pi, 0x0); in bpck6_disconnect()
390 bpck6_deselect(pi); in bpck6_disconnect()
394 static int bpck6_test_port(struct pi_adapter *pi) in bpck6_test_port() argument
396 dev_dbg(&pi->dev, "PARPORT indicates modes=%x for lp=0x%lx\n", in bpck6_test_port()
397 pi->pardev->port->modes, pi->pardev->port->base); in bpck6_test_port()
400 if (pi->pardev->port->modes & PARPORT_MODE_EPP) in bpck6_test_port()
402 if (pi->pardev->port->modes & PARPORT_MODE_TRISTATE) in bpck6_test_port()
407 static int bpck6_probe_unit(struct pi_adapter *pi) in bpck6_probe_unit() argument
411 dev_dbg(&pi->dev, "PROBE UNIT %x on port:%x\n", pi->unit, pi->port); in bpck6_probe_unit()
413 saved_mode = pi->mode; in bpck6_probe_unit()
415 pi->mode = 0; in bpck6_probe_unit()
417 out = bpck6_open(pi); in bpck6_probe_unit()
419 dev_dbg(&pi->dev, "ppc_open returned %2x\n", out); in bpck6_probe_unit()
422 bpck6_deselect(pi); in bpck6_probe_unit()
423 dev_dbg(&pi->dev, "leaving probe\n"); in bpck6_probe_unit()
424 pi->mode = saved_mode; in bpck6_probe_unit()
428 dev_dbg(&pi->dev, "Failed open\n"); in bpck6_probe_unit()
429 pi->mode = saved_mode; in bpck6_probe_unit()
434 static void bpck6_log_adapter(struct pi_adapter *pi) in bpck6_log_adapter() argument
438 dev_info(&pi->dev, in bpck6_log_adapter()
440 pi->unit, pi->port, pi->mode, mode_string[pi->mode], pi->delay); in bpck6_log_adapter()