Subversion Repositories HelenOS

Rev

Rev 2089 | Rev 2101 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2089 Rev 2095
Line 75... Line 75...
75
struct __bus_entry *bus_entries = NULL;
75
struct __bus_entry *bus_entries = NULL;
76
struct __io_apic_entry *io_apic_entries = NULL;
76
struct __io_apic_entry *io_apic_entries = NULL;
77
struct __io_intr_entry *io_intr_entries = NULL;
77
struct __io_intr_entry *io_intr_entries = NULL;
78
struct __l_intr_entry *l_intr_entries = NULL;
78
struct __l_intr_entry *l_intr_entries = NULL;
79
 
79
 
80
int processor_entry_cnt = 0;
80
unsigned int processor_entry_cnt = 0;
81
int bus_entry_cnt = 0;
81
unsigned int bus_entry_cnt = 0;
82
int io_apic_entry_cnt = 0;
82
unsigned int io_apic_entry_cnt = 0;
83
int io_intr_entry_cnt = 0;
83
unsigned int io_intr_entry_cnt = 0;
84
int l_intr_entry_cnt = 0;
84
unsigned int l_intr_entry_cnt = 0;
85
 
85
 
86
/*
86
/*
87
 * Implementation of IA-32 SMP configuration interface.
87
 * Implementation of IA-32 SMP configuration interface.
88
 */
88
 */
89
static count_t get_cpu_count(void);
89
static count_t get_cpu_count(void);
Line 127... Line 127...
127
/*
127
/*
128
 * Used to check the integrity of the MP Floating Structure.
128
 * Used to check the integrity of the MP Floating Structure.
129
 */
129
 */
130
int mps_fs_check(uint8_t *base)
130
int mps_fs_check(uint8_t *base)
131
{
131
{
132
    int i;
132
    unsigned int i;
133
    uint8_t sum;
133
    uint8_t sum;
134
   
134
   
135
    for (i = 0, sum = 0; i < 16; i++)
135
    for (i = 0, sum = 0; i < 16; i++)
136
        sum += base[i];
136
        sum += base[i];
137
   
137
   
Line 163... Line 163...
163
}
163
}
164
 
164
 
165
void mps_init(void)
165
void mps_init(void)
166
{
166
{
167
    uint8_t *addr[2] = { NULL, (uint8_t *) PA2KA(0xf0000) };
167
    uint8_t *addr[2] = { NULL, (uint8_t *) PA2KA(0xf0000) };
168
    int i, j, length[2] = { 1024, 64*1024 };
168
    unsigned int i, j, length[2] = { 1024, 64 * 1024 };
169
   
169
   
170
 
170
 
171
    /*
171
    /*
172
     * Find MP Floating Pointer Structure
172
     * Find MP Floating Pointer Structure
173
     * 1a. search first 1K of EBDA
173
     * 1a. search first 1K of EBDA
Line 206... Line 206...
206
}
206
}
207
 
207
 
208
int configure_via_ct(void)
208
int configure_via_ct(void)
209
{
209
{
210
    uint8_t *cur;
210
    uint8_t *cur;
211
    int i, cnt;
211
    unsigned int i, cnt;
212
       
212
       
213
    if (ct->signature != CT_SIGNATURE) {
213
    if (ct->signature != CT_SIGNATURE) {
214
        printf("%s: bad ct->signature\n", __FUNCTION__);
214
        printf("%s: bad ct->signature\n", __FUNCTION__);
215
        return 1;
215
        return 1;
216
    }
216
    }
Line 318... Line 318...
318
#endif
318
#endif
319
}
319
}
320
 
320
 
321
void ct_io_apic_entry(struct __io_apic_entry *ioa)
321
void ct_io_apic_entry(struct __io_apic_entry *ioa)
322
{
322
{
323
    static int io_apic_count = 0;
323
    static unsigned int io_apic_count = 0;
324
 
324
 
325
    /* this ioapic is marked unusable */
325
    /* this ioapic is marked unusable */
326
    if ((ioa->io_apic_flags & 1) == 0)
326
    if ((ioa->io_apic_flags & 1) == 0)
327
        return;
327
        return;
328
   
328
   
Line 413... Line 413...
413
    }
413
    }
414
}
414
}
415
 
415
 
416
int mps_irq_to_pin(int irq)
416
int mps_irq_to_pin(int irq)
417
{
417
{
418
    int i;
418
    unsigned int i;
419
   
419
   
420
    for(i=0;i<io_intr_entry_cnt;i++) {
420
    for(i = 0; i < io_intr_entry_cnt; i++) {
421
        if (io_intr_entries[i].src_bus_irq == irq && io_intr_entries[i].intr_type == 0)
421
        if (io_intr_entries[i].src_bus_irq == irq && io_intr_entries[i].intr_type == 0)
422
            return io_intr_entries[i].dst_io_apic_pin;
422
            return io_intr_entries[i].dst_io_apic_pin;
423
    }
423
    }
424
   
424
   
425
    return -1;
425
    return -1;