Subversion Repositories Kolibri OS

Rev

Rev 883 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
808 serge 1
 
881 serge 2
#include "radeon_chipset_gen.h"
3
#include "radeon_chipinfo_gen.h"
4
808 serge 5
 
812 serge 6
 
7
 
808 serge 8
xf86TokenToString(SymTabPtr table, int token)
9
{
10
    int i;
11
12
 
13
14
 
15
      return NULL;
16
    else
17
      return(table[i].name);
18
}
19
20
 
881 serge 21
 
22
 
23
{
24
  while(list->pci_device_id)
25
  {
26
    if(dev == list->pci_device_id)
27
      return list;
28
    list++;
29
  }
30
  return 0;
31
}
32
33
 
34
 
808 serge 35
{
36
    const RADEONCardInfo *dev;
1002 serge 37
    u32_t bus, last_bus;
38
808 serge 39
 
1002 serge 40
        return 0;
41
808 serge 42
 
1002 serge 43
    {
808 serge 44
        u32_t devfn;
1002 serge 45
808 serge 46
 
1002 serge 47
        {
48
            u32_t id;
49
            id = PciRead32(bus,devfn, 0);
50
808 serge 51
 
1002 serge 52
                continue;
53
881 serge 54
 
1002 serge 55
808 serge 56
 
1002 serge 57
            {
58
                u32_t reg2C;
59
                int i;
60
808 serge 61
 
1002 serge 62
                if (!rhd.chipset){
63
                    dbgprintf("ChipID 0x%04x is not recognized\n", rhd.PciDeviceID);
64
                    return FALSE;
65
                }
66
                dbgprintf("Chipset: \"%s\" (ChipID = 0x%04x)\n",
67
                           rhd.chipset,rhd.PciDeviceID);
68
808 serge 69
 
1002 serge 70
                rhd.devfn = devfn;
71
                rhd.PciTag = pciTag(bus,(devfn>>3)&0x1F,devfn&0x7);
72
808 serge 73
 
1002 serge 74
                rhd.IsMobility  = dev->mobility;
75
                rhd.IsIGP       = dev->igp;
76
                rhd.HasCRTC2    = !dev->nocrtc2;
77
808 serge 78
 
1002 serge 79
808 serge 80
 
1002 serge 81
                rhd.subdevice_id = reg2C >> 16;
82
881 serge 83
 
1002 serge 84
                    dbgprintf("R600 unsupported yet.\nExit\n");
85
881 serge 86
 
808 serge 87
 
1002 serge 88
                {
89
                    u32_t base;
90
                    Bool validSize;
91
92
 
93
                    if(base)
94
                    {
95
                        if (base & PCI_MAP_IO){
96
                            rhd.ioBase[i] = (u32_t)PCIGETIO(base);
97
                            rhd.memtype[i]   = base & PCI_MAP_IO_ATTR_MASK;
98
                        }
99
                        else{
100
                            rhd.memBase[i] = (u32_t)PCIGETMEMORY(base);
101
                            rhd.memtype[i] = base & PCI_MAP_MEMORY_ATTR_MASK;
102
                        }
103
                    }
104
                    rhd.memsize[i] = pciGetBaseSize(bus,devfn, i, TRUE, &validSize);
105
                }
106
                return &rhd;
107
            }
808 serge 108
        }
109
    };
110
    return NULL;
1002 serge 111
}
808 serge 112
113
 
114
 
115
 
877 serge 116
{
808 serge 117
  int offset;
118
  u32_t addr1;
877 serge 119
  u32_t addr2;
120
  u32_t mask1;
121
  u32_t mask2;
122
  int bits = 0;
808 serge 123
124
 
125
   * silently ignore bogus index values.  Valid values are 0-6.  0-5 are
126
   * the 6 base address registers, and 6 is the ROM base address register.
127
   */
128
  if (index < 0 || index > 6)
129
    return 0;
130
131
 
132
    *min = destructive;
133
134
 
135
  if (index == 6)
136
    offset = PCI_MAP_ROM_REG;
137
  else
138
    offset = PCI_MAP_REG_START + (index << 2);
139
140
 
141
  /*
142
   * Check if this is the second part of a 64 bit address.
143
   * XXX need to check how endianness affects 64 bit addresses.
144
   */
145
  if (index > 0 && index < 6) {
146
    addr2 = PciRead32(bus, devfn, offset - 4);
147
    if (PCI_MAP_IS_MEM(addr2) && PCI_MAP_IS64BITMEM(addr2))
148
      return 0;
149
  }
150
151
 
152
     PciWrite32(bus, devfn, offset, 0xffffffff);
153
     mask1 = PciRead32(bus, devfn, offset);
154
     PciWrite32(bus, devfn, offset, addr1);
155
  } else {
156
    mask1 = addr1;
157
  }
158
159
 
160
  if (index < 5 && PCI_MAP_IS_MEM(mask1) && PCI_MAP_IS64BITMEM(mask1))
161
  {
162
    if (PCIGETMEMORY(mask1) == 0)
163
    {
164
      addr2 = PciRead32(bus, devfn, offset + 4);
165
      if (destructive)
166
      {
167
        PciWrite32(bus, devfn, offset + 4, 0xffffffff);
168
        mask2 = PciRead32(bus, devfn, offset + 4);
169
        PciWrite32(bus, devfn, offset + 4, addr2);
170
      }
171
      else
172
     {
173
       mask2 = addr2;
174
     }
175
     if (mask2 == 0)
176
       return 0;
177
     bits = 32;
178
     while ((mask2 & 1) == 0)
179
     {
180
       bits++;
181
       mask2 >>= 1;
182
     }
183
     if (bits > 32)
184
	  return bits;
185
    }
186
  }
187
  if (index < 6)
188
    if (PCI_MAP_IS_MEM(mask1))
189
      mask1 = PCIGETMEMORY(mask1);
190
    else
191
      mask1 = PCIGETIO(mask1);
192
  else
193
    mask1 = PCIGETROM(mask1);
194
  if (mask1 == 0)
195
    return 0;
196
  bits = 0;
197
  while ((mask1 & 1) == 0) {
198
    bits++;
199
    mask1 >>= 1;
200
  }
201
  /* I/O maps can be no larger than 8 bits */
202
203
 
204
    bits = 8;
205
  /* ROM maps can be no larger than 24 bits */
206
  if (index == 6 && bits > 24)
207
    bits = 24;
208
  return bits;
209
}
210
>
211
 
212