Rev 1302 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1302 | Rev 1307 | ||
---|---|---|---|
Line 23... | Line 23... | ||
23 | struct pci_access *pci_alloc(void) |
23 | struct pci_access *pci_alloc(void) |
24 | { |
24 | { |
25 | struct pci_access *a = malloc(sizeof(struct pci_access)); |
25 | struct pci_access *a = malloc(sizeof(struct pci_access)); |
26 | int i; |
26 | int i; |
27 | 27 | ||
- | 28 | if (!a) |
|
- | 29 | return NULL; |
|
- | 30 | ||
28 | bzero(a, sizeof(*a)); |
31 | bzero(a, sizeof(*a)); |
29 | for (i = 0; i < PCI_ACCESS_MAX; i++) |
32 | for (i = 0; i < PCI_ACCESS_MAX; i++) |
30 | if (pci_methods[i] && pci_methods[i]->config) |
33 | if (pci_methods[i] && pci_methods[i]->config) |
31 | pci_methods[i]->config(a); |
34 | pci_methods[i]->config(a); |
32 | return a; |
35 | return a; |
Line 35... | Line 38... | ||
35 | void *pci_malloc(struct pci_access *a, int size) |
38 | void *pci_malloc(struct pci_access *a, int size) |
36 | { |
39 | { |
37 | void *x = malloc(size); |
40 | void *x = malloc(size); |
38 | 41 | ||
39 | if (!x) |
42 | if (!x) |
40 | a->error("Out of memory (allocation of %d bytes failed)", |
43 | a->error("Out of memory (allocation of %d bytes failed)", size); |
41 | size); |
- | |
42 | return x; |
44 | return x; |
43 | } |
45 | } |
44 | 46 | ||
45 | void pci_mfree(void *x) |
47 | void pci_mfree(void *x) |
46 | { |
48 | { |
Line 216... | Line 218... | ||
216 | 218 | ||
217 | static inline int |
219 | static inline int |
218 | pci_write_data(struct pci_dev *d, void *buf, int pos, int len) |
220 | pci_write_data(struct pci_dev *d, void *buf, int pos, int len) |
219 | { |
221 | { |
220 | if (pos & (len - 1)) |
222 | if (pos & (len - 1)) |
221 | d->access->error("Unaligned write: pos=%02x,len=%d", pos, |
223 | d->access->error("Unaligned write: pos=%02x,len=%d", pos, len); |
222 | len); |
- | |
223 | if (pos + len <= d->cache_len) |
224 | if (pos + len <= d->cache_len) |
224 | memcpy(d->cache + pos, buf, len); |
225 | memcpy(d->cache + pos, buf, len); |
225 | return d->methods->write(d, pos, buf, len); |
226 | return d->methods->write(d, pos, buf, len); |
226 | } |
227 | } |
227 | 228 | ||
Line 243... | Line 244... | ||
243 | } |
244 | } |
244 | 245 | ||
245 | int pci_write_block(struct pci_dev *d, int pos, byte * buf, int len) |
246 | int pci_write_block(struct pci_dev *d, int pos, byte * buf, int len) |
246 | { |
247 | { |
247 | if (pos < d->cache_len) { |
248 | if (pos < d->cache_len) { |
248 | int l = |
- | |
249 | (pos + len >= |
- | |
250 | d->cache_len) ? (d->cache_len - pos) : len; |
249 | int l = (pos + len >= d->cache_len) ? (d->cache_len - pos) : len; |
251 | memcpy(d->cache + pos, buf, l); |
250 | memcpy(d->cache + pos, buf, l); |
252 | } |
251 | } |
253 | return d->methods->write(d, pos, buf, len); |
252 | return d->methods->write(d, pos, buf, len); |
254 | } |
253 | } |
255 | 254 | ||
Line 258... | Line 257... | ||
258 | if (flags & PCI_FILL_RESCAN) { |
257 | if (flags & PCI_FILL_RESCAN) { |
259 | flags &= ~PCI_FILL_RESCAN; |
258 | flags &= ~PCI_FILL_RESCAN; |
260 | d->known_fields = 0; |
259 | d->known_fields = 0; |
261 | } |
260 | } |
262 | if (flags & ~d->known_fields) |
261 | if (flags & ~d->known_fields) |
263 | d->known_fields |= |
- | |
264 | d->methods->fill_info(d, flags & ~d->known_fields); |
262 | d->known_fields |= d->methods->fill_info(d, flags & ~d->known_fields); |
265 | return d->known_fields; |
263 | return d->known_fields; |
266 | } |
264 | } |
267 | 265 | ||
268 | void pci_setup_cache(struct pci_dev *d, byte * cache, int len) |
266 | void pci_setup_cache(struct pci_dev *d, byte * cache, int len) |
269 | { |
267 | { |