Subversion Repositories Kolibri OS

Rev

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