pciutils.h 2.33 KB
Newer Older
phcoder's avatar
phcoder committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
/*
 *  GRUB  --  GRand Unified Bootloader
 *  Copyright (C) 2008,2009  Free Software Foundation, Inc.
 *
 *  GRUB is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  GRUB is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef	GRUB_PCIUTILS_H
#define	GRUB_PCIUTILS_H	1

phcoder's avatar
phcoder committed
22
#include <pciaccess.h>
phcoder's avatar
phcoder committed
23

phcoder's avatar
phcoder committed
24
typedef struct pci_device *grub_pci_device_t;
phcoder's avatar
phcoder committed
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

static inline int
grub_pci_get_bus (grub_pci_device_t dev)
{
  return dev->bus;
}

static inline int
grub_pci_get_device (grub_pci_device_t dev)
{
  return dev->dev;
}

static inline int
grub_pci_get_function (grub_pci_device_t dev)
{
  return dev->func;
}

struct grub_pci_address
{
  grub_pci_device_t dev;
  int pos;
};

typedef struct grub_pci_address grub_pci_address_t;

static inline grub_uint32_t
grub_pci_read (grub_pci_address_t addr)
{
phcoder's avatar
phcoder committed
55 56 57
  grub_uint32_t ret;
  pci_device_cfg_read_u32 (addr.dev, &ret, addr.pos);
  return ret;
phcoder's avatar
phcoder committed
58 59 60 61 62
}

static inline grub_uint16_t
grub_pci_read_word (grub_pci_address_t addr)
{
phcoder's avatar
phcoder committed
63 64 65
  grub_uint16_t ret;
  pci_device_cfg_read_u16 (addr.dev, &ret, addr.pos);
  return ret;
phcoder's avatar
phcoder committed
66 67 68 69 70
}

static inline grub_uint8_t
grub_pci_read_byte (grub_pci_address_t addr)
{
phcoder's avatar
phcoder committed
71 72 73
  grub_uint8_t ret;
  pci_device_cfg_read_u8 (addr.dev, &ret, addr.pos);
  return ret;
phcoder's avatar
phcoder committed
74 75 76 77 78
}

static inline void
grub_pci_write (grub_pci_address_t addr, grub_uint32_t data)
{
phcoder's avatar
phcoder committed
79
  pci_device_cfg_write_u32 (addr.dev, data, addr.pos);
phcoder's avatar
phcoder committed
80 81 82 83 84
}

static inline void
grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data)
{
phcoder's avatar
phcoder committed
85
  pci_device_cfg_write_u16 (addr.dev, data, addr.pos);
phcoder's avatar
phcoder committed
86 87 88 89 90
}

static inline void
grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
{
phcoder's avatar
phcoder committed
91
  pci_device_cfg_write_u8 (addr.dev, data, addr.pos);
phcoder's avatar
phcoder committed
92 93
}

phcoder's avatar
phcoder committed
94 95 96 97 98 99 100 101 102
void *
grub_pci_device_map_range (grub_pci_device_t dev, grub_addr_t base,
			   grub_size_t size);

void
grub_pci_device_unmap_range (grub_pci_device_t dev, void *mem,
			     grub_size_t size);


phcoder's avatar
phcoder committed
103
#endif /* GRUB_PCIUTILS_H */