#ifndef _MULTICORE_ETH_H_ #define _MULTICORE_ETH_H_ // // Регистры Ethernet MAC // #if defined(CONFIG_MCT06) // MODE Control and Status Register #define RG_MODE_CSR 0x00 // MAC Control and Status Register #define RG_MAC_CSR 0x04 // Регистр режима работы порта MD #define RG_MD_MODE 0x08 // Регистр управления портом MD #define RG_MD_CONTROL 0x0C // Регистр статуса порта MD #define RG_MD_STATUS 0x10 // Младшая часть исходного адреса MAC #define RG_SRC_ADDR1 0x14 // Старшая часть исходного адреса MAC #define RG_SRC_ADDR2 0x18 // Младшая часть адреса назначения #define RG_DST_ADDR1 0x1C // Старшая часть адреса назначения #define RG_DST_ADDR2 0x20 // Тип кадра #define RG_TYPE 0x24 // Регистр ограничения длины кадра на прием #define RG_LEN_BORDER_RX 0x28 // IFS и режим обработки коллизии #define RG_IFS_COLL_MODE 0x2C // Младшая часть уникального адреса MAC #define RG_UC_ADDR1 0x30 // Старшая часть уникального адреса MAC #define RG_UC_ADDR2 0x34 // Младшая часть группового адреса #define RG_MC_ADDR1 0x38 // Старшая часть группового адреса #define RG_MC_ADDR2 0x3C // Младшая часть маски группового адреса #define RG_MCADDR_MASK_L 0x40 // Старшая часть маски группового адреса #define RG_MCADDR_MASK_H 0x44 // Младшая часть хэш-таблицы #define RG_HASHT_L 0x48 // Старшая часть хэш-таблицы #define RG_HASHT_H 0x4C // AFDX- mac address #define RG_AFDX_ADDR 0x50 // Transmit Timer #define RG_SEND_FR_TIMER 0x54 // Transmit Buffer Control and Status Register #define RG_TXB_CSR 0x58 // Receive Buffer Control and Status Register #define RG_RXB_CSR 0x5C // Interrupt Control and Status Register #define RG_INT_CSR 0x60 // Счетчик передаваемых кадров #define RG_TX_FRAME_CNT 0x64 // Статус выполненной передачи #define RG_TX_STATUS 0x68 // Счетчик принятых кадров #define RG_RX_FRAME_CNT 0x6C // Статус выполнения приема #define RG_RX_STATUS 0x70 // Receive Control Register #define RG_RX_CTR 0x74 // // MODE_CSR - mode control register // #define F_MODE_ETHERNET 0 #define F_MODE_AFDX (1 << 0) #define F_LOOPBACK (1 << 31) // // MAC_CSR - MAC Control and Status Register // #define F_EN_MAC (1 << 0) #define F_EN_RX (1 << 1) #define F_EN_TX (1 << 2) #define F_FULLD_RX (1 << 4) #define F_FULLD (1 << 5) #define F_TXM_BUSY (1 << 8) #define F_RXM_BUSY (1 << 9) // // MD_MODE - режим работы порта MD // #define F_DIVIDER(n) ((n + 1) & 0xfe) // делитель для частоты MDC must be even #define F_RST_MD (1 << 31) // сброс порта PHY // // MD_CONTROL - управление порта MD // #define F_DATA(n) ((n) & 0xffff) // данные для записи #define F_REG(n) (((n) & 0x1f) << 16) // адрес регистра PHY #define F_PHY(n) (((n) & 0x1f) << 24) // адрес PHY #define F_IRQ(n) (1 << 29) // нужно прерывание #define F_OP_READ (1 << 30) // операция чтения #define F_OP_WRITE (2 << 30) // операция записи // // MD_STATUS - статус порта MD // #define F_DATA_MASK 0xffff // прочитанные данные #define F_MD_BUSY (1 << 29) // порт занят #define F_END_READ (1 << 30) // завершилась операция чтения #define F_END_WRITE (1 << 31) // завершилась операция записи // // IFS_COLL_MODE - режим обработки коллизии // #define F_ATTEMPT_NUM(n) ((n) & 15) // Количество попыток повторных передач #define F_MEDIUM_BUSY (1 << 4) // Флаг занятости среды передачи #define F_CW_EN (1 << 6) // Разрешение отслеживания окна коллизии #define F_TM_BACKOFF (1 << 7) // Тестовый режим #define F_COLL_WIN(n) (((n) & 0xFF) << 8) // Размер окна коллизии #define F_JAMB(n) (((n) & 0xFF) << 16) // Байт jam-сообщения #define F_IFS(n) (((n) & 0xFF) << 24) // Межкадровый интервал // // SEND_FR_TIMER - Transmit Timer // #define F_SEND_FR_TIMER(n) ((n) & 0xFFFFFFF) #define F_TICK_TIMER (1 << 30) #define F_EN_TIMER (1 << 31) // // TXB_CSR - Transmit Buffer Control and Status Register // #define F_CLR_TXB (1 << 0) // Сброс указателей передающего буфера #define F_TX_WORD_NUM(s) ((s >> 4) & 0x3FF) // Количество 64-разрядных слов буфера TXB в очереди на передачу #define F_TX_FRAME_NUM(s) ((s >> 16) & 0x3F) // Количество кадров в буфере TXB в очереди на передачу #define F_FULL (1 << 24) // Признак того, что в буфере передачи TXB нет места #define F_EMPTY (1 << 25) // Буфер TXB полностью пустой #define F_TXB_BUSY (1 << 29) // выполняется обращение к буферу передачи #define F_TX_DSBL (1 << 30) // Запрещение передачи кадров из буфера TXB в сеть #define F_TX_STEP (1 << 31) // Пошаговая передача кадров // // RXB_CSR - Receive Buffer Control and Status Register // #define F_CLR_RXB (1 << 0) // Сброс указателей буфера приема #define F_RX_WORD_NUM(s) ((s >> 4) & 0x3FF) // Количество 64-разрядных слов буфера RXB #define F_RX_FRAME_NUM(s) ((s >> 16) & 0x3F) // Количество принятых кадров в буфере приёма RXB #define F_FULL (1 << 24) // Буфер приёма кадров RXB полный #define F_EMPTY (1 << 25) // Буфер приёма кадров RXB пустой #define F_RXB_BUSY (1 << 29) // выполняется обращение к буферу приема #define F_RX_DSBL (1 << 30) // Запрещение выдачи кадров из буфера приёма RXB #define F_RX_STEP (1 << 31) // Пошаговая передача кадров // // INT_CSR — Interrupt Control and Status Register // #define F_MD_INT (1 << 23) // Маскируемое прерывание от MD порта #define F_RX_ERROR_INT (1 << 26) // Признак наличия прерывания при обнаружении ошибки во время приема кадра #define F_RX_INT (1 << 27) // Признак наличия прерывания при успешном приеме кадра #define F_TX_ERROR_INT (1 << 30) // Признак наличия прерывания при обнаружении ошибки во время передаче кадра #define F_TX_INT (1 << 31) // Признак наличия прерывания при успешной передаче кадра // // TX_STATUS — Transmit Frame Status // #define F_CC_TX(s) ((s) & 0x0F) // Признак завершения передачи кадра: #define F_CC_TX_OK 0x00 // кадр успешно передан #define F_CC_TX_EXCOLER 0x01 // ошибка превышения максимального количества попыток повторных передач кадра #define F_CC_TX_LTCOLER 0x02 // ошибка поздней коллизии #define F_COLL_NUM(s) ((s >> 4) & 0x0F) // Счетчик попыток повторных передач кадра #define F_ONCOL (1 << 8) // Флаг наличия коллизий в среде передачи // // RX_STATUS — Receive Frame Status // #define F_CC_RX(s) ((s) & 0x0F) // Признак завершения приема кадра #define F_CC_RX_OK 0x00 // кадр успешно принят #define F_CC_RX_TOOLONG 0x01 // Слишком длинный кадр #define F_CC_RX_DTLNGER 0x02 // ошибка длины поля данных в принятом кадре #define F_CC_RX_PHY_ER 0x03 // Во время приема кадра обнаружен сигнал RX_ER от PHY #define F_CC_RX_FCSER 0x04 // ошибка CRC принятого кадра #define F_CC_RX_ALIGNER 0x05 // ошибка выравнивания в принятом кадре #define F_AFDX_ADDR (1 << 4) // адрес назначения совпал с AFDX адресом MAC #define F_UC (1 << 5) // Распознавание адреса MAC #define F_MCHT (1 << 6) // Групповой адрес по хэш-таблице #define F_MC (1 << 7) // Групповой адрес по маске #define F_BC (1 << 8) // Широковещательный адрес #define F_ALL (1 << 9) // Приём кадров с любым адресом // // RX_CTR — Receive Control Register // #define F_PAS_BAD_FRAME (1 << 0) // Разрешение приема кадров содержащих ошибки #define F_AFDX_ADDR_EN (1 << 4) // Разрешение сравнения бит поля DA принятого кадра, со значением регистра AFDX_ADDR #define F_UC_EN (1 << 5) // Разрешение приема кадров с уникальным адресом назначения #define F_MCHT_EN (1 << 6) // Разрешение приема кадров с групповым адресом назначения в хэш-таблице. #define F_MC_EN (1 << 7) // Разрешение приема кадров с групповым адресом назначения #define F_BC_EN (1 << 8) // Разрешение приема кадров с широковещательным адресом назначения #define F_ALL_EN (1 << 9) // Разрешение приема кадров с произвольным адресом назначения #else // Управление MAC #define RG_CONTROL 0x00 // Младшая часть исходного адреса MAC #define RG_ADDR_L 0x04 // Старшая часть исходного адреса MAC #define RG_ADDR_H 0x08 // Младшая часть адреса назначения #define RG_DADDR_L 0x0C // Старшая часть адреса назначения #define RG_DADDR_H 0x10 // Контрольная сумма кадра #define RG_FCS_CLIENT 0x14 // Тип кадра #define RG_TYPE 0x18 // IFS и режим обработки коллизии #define RG_IFS_COLL_MODE 0x1C // Управление передачей кадра #define RG_TX_FRAME_CONTROL 0x20 // Статус передачи кадра #define RG_STATUS_TX 0x24 // Младшая часть уникального адреса MAC #define RG_UCADDR_L 0x28 // Старшая часть уникального адреса MAC #define RG_UCADDR_H 0x2C // Младшая часть группового адреса #define RG_MCADDR_L 0x30 // Старшая часть группового адреса #define RG_MCADDR_H 0x34 // Младшая часть маски группового адреса #define RG_MCADDR_MASK_L 0x38 // Старшая часть маски группового адреса #define RG_MCADDR_MASK_H 0x3C // Младшая часть хэш-таблицы #define RG_HASHT_L 0x40 // Старшая часть хэш-таблицы #define RG_HASHT_H 0x44 // Управление приемом кадра #define RG_RX_FRAME_CONTROL 0x48 // Максимальный размер принимаемого кадра #define RG_RX_FR_MAXSIZE 0x4C // Статус приема кадра #define RG_STATUS_RX 0x50 // FIFO статусов принятых кадров #define RG_RX_FRAME_STATUS_FIFO 0x54 // Управление порта MD #define RG_MD_CONTROL 0x58 // Статус порта MD #define RG_MD_STATUS 0x5C // Режим работы порта MD #define RG_MD_MODE 0x60 // Управление и состояние режима тестирования TX_FIFO #define RG_TX_TEST_CSR 0x64 // Передающее TX_FIFO #define RG_TX_FIFO 0x68 // Управление и состояние режима тестирования RX_FIFO #define RG_RX_TEST_CSR 0x6C // Принимающее RX_FIFO #define RG_RX_FIFO 0x70 // // MAC_CONTROL - управление MAC // #define F_FULLD (1 << 0) // дуплексный режим #define F_EN_TX_DMA (1 << 1) // разрешение передающего TX DMА #define F_EN_TX (1 << 2) // разрешение передачи #define F_IRQ_TX_DONE (1 << 3) // прерывание от передачи #define F_EN_RX (1 << 4) // разрешение приема #define F_LOOPBACK (1 << 5) // режим зацикливания #define F_FULLD_RX (1 << 6) // тестовый режим приема #define F_IRQ_RX_DONE (1 << 7) // прерывание по приёму #define F_IRQ_RX_OVF (1 << 8) // прерывание по переполнению #define F_CP_TX (1 << 9) // сброс передающего TX_FIFO #define F_RST_TX (1 << 10) // сброс блока передачи #define F_CP_RX (1 << 11) // сброс принимающего RX_FIFO #define F_RST_RX (1 << 12) // сброс блока приема // // IFS_COLL_MODE - режим обработки коллизии // #define F_ATTEMPT_NUM(n) ((n) & 15) // Количество попыток повторных передач #define F_EN_CW (1 << 4) // Разрешение отслеживания окна коллизии #define F_TM_BACKOFF (1 << 7) // Тестовый режим #define F_COLL_WIN(n) ((n) << 8) // Размер окна коллизии #define F_JAMB(n) ((n) << 16) // Байт jam-сообщения #define F_IFS(n) ((n) << 24) // Межкадровый интервал // // TX_FRAME_CONTROL - управление передачей кадра // #define F_LENGTH(n) ((n) & 0xfff) // Число байт данных #define F_TYPE_EN (1 << 12) // Поле длины задаёт тип #define F_FCS_CLT_EN (1 << 13) // Контрольная сумма из регистра #define F_DISENCAPFR (1 << 14) // Запрет формирования кадра в блоке передачи #define F_DISPAD (1 << 15) // Запрет заполнителей #define F_TX_REQ (1 << 16) // Передача кадра // // STATUS_TX - статус передачи кадра // #define F_ONTX_REQ (1 << 0) // Выполняется запрос передачи #define F_ONTRANSMIT (1 << 1) // Выполняется передача кадра #define F_TX_BUSY (1 << 2) // Среда передачи занята #define F_TX_DONE (1 << 3) // Передача завершена #define F_TRANSMIT_DISABLED (1 << 4) // Передача не разрешена #define F_NOT_ENOUGH_DATA (1 << 5) // Мало данных в TX FIFO #define F_TRANSMIT_OK (1 << 6) // Передача кадра успешно выполнена #define F_EXCESSIVE_COLL (1 << 7) // Повторная передача не удалась #define F_LATE_COLL (1 << 8) // Поздняя коллизия #define F_ONCOL (1 << 11) // Коллизия в среде передачи #define F_COLL_NUM(s) ((s) >> 12 & 15) // Счетчик попыток повторных передач #define F_TXW(s) ((s) >> 16 & 0x3ff) // Число слов в TX FIFO #define F_STATUS_TX_BITS "\20"\ "\1ONTX_REQ\2ONTRANSMIT\3BUSY\4DONE\5DISABLED\6NDATA\7TXOK\10EXCCOLL"\ "\11LATECOLL\14ONCOL" // // RX_FRAME_CONTROL - управление приемом кадра // #define F_DIS_RCV_FCS (1 << 0) // Отключение сохранения контрольной суммы #define F_DIS_PAD_DEL (1 << 1) // Отключение удаления заполнителей #define F_ACC_TOOSHORT (1 << 2) // Прием коротких кадров #define F_DIS_TOOLONG (1 << 3) // Отбрасывание слишком длинных кадров #define F_DIS_FCSCHERR (1 << 4) // Отбрасывание кадров с ошибкой контрольной суммы #define F_DIS_LENGTHERR (1 << 5) // Отбрасывание кадров с ошибкой длины #define F_DIS_BC (1 << 6) // Запрещение приема кадров с широковещательным адресом #define F_EN_MCM (1 << 7) // Разрешение приема кадров с групповым адресом по маске #define F_EN_MCHT (1 << 8) // Разрешение приема кадров с групповым адресом по хеш-таблице #define F_EN_ALL (1 << 9) // Разрешение приема кадров с любым адресом // // STATUS_RX - статус приема кадра // #define F_RCV_DISABLED (1 << 0) // Приём не разрешён #define F_ONRECEIVE (1 << 1) // Выполняется приём кадра #define F_RX_DONE (1 << 3) // Есть кадры в RX FIFO #define F_NUM_FR(s) ((s) >> 4 & 0x7f) // Число принятых кадров #define F_STATUS_OVF (1 << 11) // Переполнение FIFO статусов #define F_RXW(s) ((s) >> 12 & 0x3ff) // Число слов в RX FIFO #define F_FIFO_OVF (1 << 23) // Переполнение FIFO данных #define F_NUM_MISSED(s) ((s) >> 24 & 0x3f) // Число пропущенных кадров #define F_STATUS_RX_BITS "\30"\ "\1DISABLED\2ONRECEIVE\4DONE\14STATUS_OVF\30FIFO_OVF" // // RX_FRAME_STATUS_FIFO - FIFO статусов принятых кадров // #define F_LEN(s) ((s) & 0xfff) // Число байт в принятом кадре #define F_OK (1 << 12) // Кадр принят без ошибок #define F_LENGTH_ERROR (1 << 13) // Ошибка длины данных #define F_ALIGN_ERROR (1 << 14) // Ошибка выравнивания #define F_FRAME_ERROR (1 << 15) // Ошибка формата кадра #define F_TOO_LONG (1 << 16) // Слишком длинный кадр #define F_TOO_SHORT (1 << 17) // Слишком короткий кадр #define F_DRIBBLE_NIBBLE (1 << 18) // Нечётное число полубайт #define F_LEN_FIELD (1 << 19) // Распознавание поля LENGTH #define F_FCS_DEL (1 << 20) // Удаление поля FCS #define F_PAD_DEL (1 << 21) // Удаление поля PAD #define F_UC (1 << 22) // Распознавание адреса MAC #define F_MCM (1 << 23) // Групповой адрес по маске #define F_MCHT (1 << 24) // Групповой адрес по хэш-таблице #define F_BC (1 << 25) // Широковещательный адрес #define F_ALL (1 << 26) // Приём кадров с любым адресом // // MD_MODE - режим работы порта MD // #define F_DIVIDER(n) ((n) & 0xff) // делитель для частоты MDC #define F_RST (1 << 8) // сброс порта PHY // // MD_CONTROL - управление порта MD // #define F_DATA(n) ((n) & 0xffff) // данные для записи #define F_REG(n) (((n) & 0x1f) << 16) // адрес регистра PHY #define F_PHY(n) (((n) & 0x1f) << 24) // адрес PHY #define F_IRQ(n) (1 << 29) // нужно прерывание #define F_OP_READ (1 << 30) // операция чтения #define F_OP_WRITE (2 << 30) // операция записи // // MD_STATUS - статус порта MD // #define F_DATA_MASK 0xffff // прочитанные данные #define F_MD_BUSY (1 << 29) // порт занят #define F_END_READ (1 << 30) // завершилась операция чтения #define F_END_WRITE (1 << 31) // завершилась операция записи #endif #endif // _MULTICORE_ETH_H_