![]() |
RTEMS 6.1
|
Intel I386 CPU Dependent Source. More...
#include <rtems/score/interrupts.h>#include <rtems/score/registers.h>#include <rtems/score/idtr.h>Go to the source code of this file.
Data Structures | |
| struct | __rtems_raw_irq_connect_data__ |
| struct | rtems_raw_irq_global_settings |
| struct | RTEMS_PACKED |
| Used for passing and retrieving registers content to/from real mode interrupt call. More... | |
| struct | la_bits |
| union | linear_address |
| struct | page_dir_bits |
| union | page_dir_entry |
| struct | page_table_bits |
| union | page_table_entry |
| struct | page_directory |
| struct | page_table |
Macros | |
| #define | I386_HAS_FPU 1 |
| #define | I386_HAS_BSWAP 1 |
| #define | CPU_NAME "Intel i386" |
| #define | CPU_swap_u32(_value) i386_swap_u32( _value ) |
| #define | CPU_swap_u16(_value) i386_swap_u16( _value ) |
| #define | i386_outport_byte(_port, _value) |
| #define | i386_outport_word(_port, _value) |
| #define | i386_outport_long(_port, _value) |
| #define | i386_inport_byte(_port, _value) |
| #define | i386_inport_word(_port, _value) |
| #define | i386_inport_long(_port, _value) |
| #define | PG_SIZE 0x1000 |
| #define | MASK_OFFSET 0xFFF |
| #define | MAX_ENTRY (PG_SIZE/sizeof(page_dir_entry)) |
| #define | FOUR_MB 0x400000 |
| #define | MASK_FLAGS 0x1A |
| #define | PTE_PRESENT 0x01 |
| #define | PTE_WRITABLE 0x02 |
| #define | PTE_USER 0x04 |
| #define | PTE_WRITE_THROUGH 0x08 |
| #define | PTE_CACHE_DISABLE 0x10 |
| #define | outport_byte(_port, _value) i386_outport_byte( _port, _value ) |
| #define | outport_word(_port, _value) i386_outport_word( _port, _value ) |
| #define | outport_long(_port, _value) i386_outport_long( _port, _value ) |
| #define | inport_byte(_port, _value) i386_inport_byte( _port, _value ) |
| #define | inport_word(_port, _value) i386_inport_word( _port, _value ) |
| #define | inport_long(_port, _value) i386_inport_long( _port, _value ) |
Typedefs | |
| typedef unsigned char | rtems_vector_offset |
| typedef struct __rtems_raw_irq_connect_data__ | rtems_raw_irq_connect_data |
Functions | |
| void * | i386_Logical_to_physical (unsigned short segment, void *address) |
| void * | i386_Physical_to_logical (unsigned short segment, void *address) |
| int | i386_Physical_to_real (void *address, uint16_t *segment, uint16_t *offset) |
| Retrieves real mode pointer elements {segmnet, offset} from physical address. | |
| rtems_raw_irq_hdl | get_hdl_from_vector (rtems_vector_offset) |
| int | i386_set_idt_entry (const rtems_raw_irq_connect_data *) |
| int | i386_get_current_idt_entry (rtems_raw_irq_connect_data *) |
| int | i386_delete_idt_entry (const rtems_raw_irq_connect_data *) |
| int | i386_init_idt (rtems_raw_irq_global_settings *config) |
| int | i386_get_idt_config (rtems_raw_irq_global_settings **config) |
| void | i386_get_info_from_GDTR (segment_descriptors **table, uint16_t *limit) |
| void | i386_set_GDTR (segment_descriptors *, uint16_t limit) |
| uint32_t | i386_raw_gdt_entry (uint16_t segment_selector_index, segment_descriptors *sd) |
| Allows to set a GDT entry. | |
| void | i386_fill_segment_desc_base (uint32_t base, segment_descriptors *sd) |
fills sd with provided base in appropriate fields of sd | |
| void | i386_fill_segment_desc_limit (uint32_t limit, segment_descriptors *sd) |
fills sd with provided limit in appropriate fields of sd | |
| uint32_t | i386_set_gdt_entry (uint16_t segment_selector, uint32_t base, uint32_t limit) |
| uint16_t | i386_next_empty_gdt_entry (void) |
| Returns next empty descriptor in GDT. | |
| uint16_t | i386_cpy_gdt_entry (uint16_t segment_selector, segment_descriptors *struct_to_fill) |
Copies GDT entry at index segment_selector to structure pointed to by struct_to_fill. | |
| segment_descriptors * | i386_get_gdt_entry (uint16_t sgmnt_selector) |
Returns pointer to GDT table at index given by segment_selector. | |
| uint32_t | i386_limit_gdt_entry (segment_descriptors *gdt_entry) |
Extracts limit in bytes from GDT entry pointed to by gdt_entry. | |
Intel I386 CPU Dependent Source.
| #define i386_inport_byte | ( | _port, | |
| _value | |||
| ) |
| #define i386_inport_long | ( | _port, | |
| _value | |||
| ) |
| #define i386_inport_word | ( | _port, | |
| _value | |||
| ) |
| #define i386_outport_byte | ( | _port, | |
| _value | |||
| ) |
| #define i386_outport_long | ( | _port, | |
| _value | |||
| ) |
| #define i386_outport_word | ( | _port, | |
| _value | |||
| ) |
| uint16_t i386_cpy_gdt_entry | ( | uint16_t | segment_selector, |
| segment_descriptors * | struct_to_fill | ||
| ) |
Copies GDT entry at index segment_selector to structure pointed to by struct_to_fill.
| [in] | segment_selector | index to GDT table specifying descriptor to copy |
| [out] | struct_to_fill | pointer to memory where will be descriptor coppied |
| 0 | FAILED segment_selector out of GDT range |
| <1;65535> | retrieved segment_selector |
| void i386_fill_segment_desc_base | ( | uint32_t | base, |
| segment_descriptors * | sd | ||
| ) |
fills sd with provided base in appropriate fields of sd
| [in] | base | 32-bit address to be set as descriptor's base |
| [out] | sd | descriptor being filled with base |
| void i386_fill_segment_desc_limit | ( | uint32_t | limit, |
| segment_descriptors * | sd | ||
| ) |
fills sd with provided limit in appropriate fields of sd
sets granularity bit if necessary
| [in] | limit | 32-bit value representing number of limit bytes |
| [out] | sd | descriptor being filled with limit |
| segment_descriptors * i386_get_gdt_entry | ( | uint16_t | sgmnt_selector | ) |
Returns pointer to GDT table at index given by segment_selector.
| [in] | sgmnt_selector | index to GDT table for specifying descriptor to get |
| NULL | FAILED segment_selector out of GDT range |
| pointer | to GDT table at segment_selector |
| uint32_t i386_limit_gdt_entry | ( | segment_descriptors * | gdt_entry | ) |
Extracts limit in bytes from GDT entry pointed to by gdt_entry.
| [in] | gdt_entry | pointer to entry from which limit should be retrieved |
| limit | value in bytes from GDT entry |
| uint16_t i386_next_empty_gdt_entry | ( | void | ) |
Returns next empty descriptor in GDT.
Number of descriptors that can be returned depends on GDT_SIZE
| 0 | FAILED GDT is full |
| <1;65535> | segment_selector number as index to GDT |
| int i386_Physical_to_real | ( | void * | address, |
| uint16_t * | segment, | ||
| uint16_t * | offset | ||
| ) |
Retrieves real mode pointer elements {segmnet, offset} from physical address.
i386_Physical_to_real Function returns the highest segment (base) address possible. Example: input address - 0x4B3A2 output segment - 0x4B3A offset - 0x2 input address - 0x10F12E output segment - 0xFFFF offset - 0xF13E
| [in] | address | address to be converted, must be less than 0x10FFEF |
| [out] | segment | segment computed from address |
| [out] | offset | offset computed from address |
| 0 | address not convertible |
| 1 | segment and offset extracted |
| uint32_t i386_raw_gdt_entry | ( | uint16_t | segment_selector_index, |
| segment_descriptors * | sd | ||
| ) |
Allows to set a GDT entry.
Puts global descriptor sd to the global descriptor table on index segment_selector_index
| [in] | segment_selector_index | index to GDT entry |
| [in] | sd | structure to be coppied to given segment_selector in GDT |
| 0 | FAILED out of GDT range or index is 0, which is not valid index in GDT |
| 1 | SUCCESS |