Revision 563e3c6e
b/hw/parallel.c | ||
---|---|---|
129 | 129 |
{ |
130 | 130 |
ParallelState *s = opaque; |
131 | 131 |
uint8_t parm = val; |
132 |
int dir; |
|
132 | 133 |
|
133 | 134 |
/* Sometimes programs do several writes for timing purposes on old |
134 | 135 |
HW. Take care not to waste time on writes that do nothing. */ |
... | ... | |
154 | 155 |
if (s->control == val) |
155 | 156 |
return; |
156 | 157 |
pdebug("wc%02x\n", val); |
158 |
|
|
159 |
if ((val & PARA_CTR_DIR) != (s->control & PARA_CTR_DIR)) { |
|
160 |
if (val & PARA_CTR_DIR) { |
|
161 |
dir = 1; |
|
162 |
} else { |
|
163 |
dir = 0; |
|
164 |
} |
|
165 |
qemu_chr_ioctl(s->chr, CHR_IOCTL_PP_DATA_DIR, &dir); |
|
166 |
parm &= ~PARA_CTR_DIR; |
|
167 |
} |
|
168 |
|
|
157 | 169 |
qemu_chr_ioctl(s->chr, CHR_IOCTL_PP_WRITE_CONTROL, &parm); |
158 | 170 |
s->control = val; |
159 | 171 |
break; |
b/qemu-char.h | ||
---|---|---|
27 | 27 |
#define CHR_IOCTL_PP_EPP_READ 9 |
28 | 28 |
#define CHR_IOCTL_PP_EPP_WRITE_ADDR 10 |
29 | 29 |
#define CHR_IOCTL_PP_EPP_WRITE 11 |
30 |
#define CHR_IOCTL_PP_DATA_DIR 12 |
|
30 | 31 |
|
31 | 32 |
#define CHR_IOCTL_SERIAL_SET_TIOCM 12 |
32 | 33 |
#define CHR_IOCTL_SERIAL_GET_TIOCM 13 |
b/vl.c | ||
---|---|---|
2835 | 2835 |
return -ENOTSUP; |
2836 | 2836 |
*(uint8_t *)arg = b; |
2837 | 2837 |
break; |
2838 |
case CHR_IOCTL_PP_DATA_DIR: |
|
2839 |
if (ioctl(fd, PPDATADIR, (int *)arg) < 0) |
|
2840 |
return -ENOTSUP; |
|
2841 |
break; |
|
2838 | 2842 |
case CHR_IOCTL_PP_EPP_READ_ADDR: |
2839 | 2843 |
if (pp_hw_mode(drv, IEEE1284_MODE_EPP|IEEE1284_ADDR)) { |
2840 | 2844 |
struct ParallelIOArg *parg = arg; |
Also available in: Unified diff