Revision aabcf526 hw/pci.h

b/hw/pci.h
323 323
    pci_set_byte(&pci_config[PCI_INTERRUPT_PIN], val);
324 324
}
325 325

  
326
/*
327
 * helper functions to do bit mask operation on configuration space.
328
 * Just to set bit, use test-and-set and discard returned value.
329
 * Just to clear bit, use test-and-clear and discard returned value.
330
 * NOTE: They aren't atomic.
331
 */
332
static inline uint8_t
333
pci_byte_test_and_clear_mask(uint8_t *config, uint8_t mask)
334
{
335
    uint8_t val = pci_get_byte(config);
336
    pci_set_byte(config, val & ~mask);
337
    return val & mask;
338
}
339

  
340
static inline uint8_t
341
pci_byte_test_and_set_mask(uint8_t *config, uint8_t mask)
342
{
343
    uint8_t val = pci_get_byte(config);
344
    pci_set_byte(config, val | mask);
345
    return val & mask;
346
}
347

  
348
static inline uint16_t
349
pci_word_test_and_clear_mask(uint8_t *config, uint16_t mask)
350
{
351
    uint16_t val = pci_get_word(config);
352
    pci_set_word(config, val & ~mask);
353
    return val & mask;
354
}
355

  
356
static inline uint16_t
357
pci_word_test_and_set_mask(uint8_t *config, uint16_t mask)
358
{
359
    uint16_t val = pci_get_word(config);
360
    pci_set_word(config, val | mask);
361
    return val & mask;
362
}
363

  
364
static inline uint32_t
365
pci_long_test_and_clear_mask(uint8_t *config, uint32_t mask)
366
{
367
    uint32_t val = pci_get_long(config);
368
    pci_set_long(config, val & ~mask);
369
    return val & mask;
370
}
371

  
372
static inline uint32_t
373
pci_long_test_and_set_mask(uint8_t *config, uint32_t mask)
374
{
375
    uint32_t val = pci_get_long(config);
376
    pci_set_long(config, val | mask);
377
    return val & mask;
378
}
379

  
380
static inline uint64_t
381
pci_quad_test_and_clear_mask(uint8_t *config, uint64_t mask)
382
{
383
    uint64_t val = pci_get_quad(config);
384
    pci_set_quad(config, val & ~mask);
385
    return val & mask;
386
}
387

  
388
static inline uint64_t
389
pci_quad_test_and_set_mask(uint8_t *config, uint64_t mask)
390
{
391
    uint64_t val = pci_get_quad(config);
392
    pci_set_quad(config, val | mask);
393
    return val & mask;
394
}
395

  
326 396
typedef int (*pci_qdev_initfn)(PCIDevice *dev);
327 397
typedef struct {
328 398
    DeviceInfo qdev;

Also available in: Unified diff