regs: properly emit doc_comments

This commit is contained in:
Astro 2019-05-24 23:49:49 +02:00
parent 56c2f1d833
commit 6bf210366a
4 changed files with 151 additions and 95 deletions

View File

@ -127,61 +127,87 @@ register!(net_ctrl, NetCtrl, RW, u32);
register_bit!(net_ctrl, clear_stat_regs, 5); register_bit!(net_ctrl, clear_stat_regs, 5);
register!(net_cfg, NetCfg, RW, u32); register!(net_cfg, NetCfg, RW, u32);
register_bit!(net_cfg,
/// false for 10Mbps, true for 100Mbps /// false for 10Mbps, true for 100Mbps
register_bit!(net_cfg, speed, 0); speed, 0);
register_bit!(net_cfg, full_duplex, 1); register_bit!(net_cfg, full_duplex, 1);
register_bit!(net_cfg,
/// Discard non-VLAN frames /// Discard non-VLAN frames
register_bit!(net_cfg, disc_non_vlan, 2); disc_non_vlan, 2);
register_bit!(net_cfg,
/// Accept all valid frames? /// Accept all valid frames?
register_bit!(net_cfg, copy_all, 4); copy_all, 4);
register_bit!(net_cfg,
/// Don't accept broadcast destination address /// Don't accept broadcast destination address
register_bit!(net_cfg, no_broadcast, 5); no_broadcast, 5);
register_bit!(net_cfg,
/// Multicast hash enable /// Multicast hash enable
register_bit!(net_cfg, multi_hash_en, 6); multi_hash_en, 6);
register_bit!(net_cfg,
/// Unicast hash enable /// Unicast hash enable
register_bit!(net_cfg, uni_hash_en, 7); uni_hash_en, 7);
register_bit!(net_cfg,
/// Accept frames up to 1536 bytes (instead of up to 1518 bytes) /// Accept frames up to 1536 bytes (instead of up to 1518 bytes)
register_bit!(net_cfg, rx_1536_byte_frames, 8); rx_1536_byte_frames, 8);
/// External address match enable - when set the external address register_bit!(net_cfg,
/// match interface can be used to copy frames to memory. /// match interface can be used to copy frames to memory.
register_bit!(net_cfg, ext_addr_match_en, 9); /// External address match enable - when set the external address
ext_addr_match_en, 9);
register_bit!(net_cfg,
/// Gigabit mode enable /// Gigabit mode enable
register_bit!(net_cfg, gige_en, 10); gige_en, 10);
register_bit!(net_cfg,
/// Enable TBI instead of GMII/MII interface? /// Enable TBI instead of GMII/MII interface?
register_bit!(net_cfg, pcs_sel, 11); pcs_sel, 11);
register_bit!(net_cfg,
/// Retry test (reduces backoff between collisions to one slot) /// Retry test (reduces backoff between collisions to one slot)
register_bit!(net_cfg, retry_test, 12); retry_test, 12);
register_bit!(net_cfg,
/// Pause frame enable /// Pause frame enable
register_bit!(net_cfg, pause_en, 13); pause_en, 13);
register_bits!(net_cfg,
/// Receive buffer offset /// Receive buffer offset
register_bits!(net_cfg, rx_buf_offset, u8, 14, 15); rx_buf_offset, u8, 14, 15);
register_bit!(net_cfg,
/// Length field error frame discard /// Length field error frame discard
register_bit!(net_cfg, len_err_frame_disc, 16); len_err_frame_disc, 16);
register_bit!(net_cfg,
/// Write received frames to memory with Frame Check Sequence removed /// Write received frames to memory with Frame Check Sequence removed
register_bit!(net_cfg, fcs_remove, 17); fcs_remove, 17);
register_bits!(net_cfg,
/// MDC clock divison /// MDC clock divison
register_bits!(net_cfg, mdc_clk_div, u8, 18, 20); mdc_clk_div, u8, 18, 20);
register_bits!(net_cfg,
/// Data bus width /// Data bus width
register_bits!(net_cfg, dbus_width, u8, 21, 22); dbus_width, u8, 21, 22);
register_bit!(net_cfg,
/// Disable copy of pause frames /// Disable copy of pause frames
register_bit!(net_cfg, dis_cp_pause_frame, 23); dis_cp_pause_frame, 23);
register_bit!(net_cfg,
/// Receive checksum offload enable /// Receive checksum offload enable
register_bit!(net_cfg, rx_chksum_offld_en, 24); rx_chksum_offld_en, 24);
register_bit!(net_cfg,
/// Enable frames to be received in half-duplex mode while /// Enable frames to be received in half-duplex mode while
/// transmitting /// transmitting
register_bit!(net_cfg, rx_hd_while_tx, 25); rx_hd_while_tx, 25);
register_bit!(net_cfg,
/// Ignore Rx Framce Check Sequence (errors will not be rejected) /// Ignore Rx Framce Check Sequence (errors will not be rejected)
register_bit!(net_cfg, ignore_rx_fcs, 26); ignore_rx_fcs, 26);
register_bit!(net_cfg,
/// SGMII mode enable /// SGMII mode enable
register_bit!(net_cfg, sgmii_en, 27); sgmii_en, 27);
register_bit!(net_cfg,
/// IPG stretch enable /// IPG stretch enable
register_bit!(net_cfg, ipg_stretch_en, 28); ipg_stretch_en, 28);
register_bit!(net_cfg,
/// Receive bad preamble /// Receive bad preamble
register_bit!(net_cfg, rx_bad_preamble, 29); rx_bad_preamble, 29);
register_bit!(net_cfg,
/// Ignore IPG rx_er /// Ignore IPG rx_er
register_bit!(net_cfg, ignore_ipg_rx_er, 30); ignore_ipg_rx_er, 30);
register_bit!(net_cfg,
/// NA /// NA
register_bit!(net_cfg, unidir_en, 31); unidir_en, 31);
register!(net_status, NetStatus, RW, u32); register!(net_status, NetStatus, RW, u32);
register_bit!(net_status, pcs_link_state, 0); register_bit!(net_status, pcs_link_state, 0);
@ -250,14 +276,17 @@ pub enum PhyOperation {
} }
register!(phy_maint, PhyMaint, RW, u32); register!(phy_maint, PhyMaint, RW, u32);
register_bits!(phy_maint,
/// Read from/write to the PHY /// Read from/write to the PHY
register_bits!(phy_maint, data, u16, 0, 15); data, u16, 0, 15);
// Write `0b10` // Write `0b10`
register_bits!(phy_maint, must_10, u8, 16, 17); register_bits!(phy_maint, must_10, u8, 16, 17);
register_bits!(phy_maint,
/// Register address /// Register address
register_bits!(phy_maint, reg_addr, u8, 18, 22); reg_addr, u8, 18, 22);
register_bits!(phy_maint,
/// PHY address /// PHY address
register_bits!(phy_maint, phy_addr, u8, 23, 27); phy_addr, u8, 23, 27);
register_bits_typed!(phy_maint, operation, u8, PhyOperation, 28, 29); register_bits_typed!(phy_maint, operation, u8, PhyOperation, 28, 29);
// PHY clause 22 compliant (not clause 45)? // PHY clause 22 compliant (not clause 45)?
register_bit!(phy_maint, clause_22, 30); register_bit!(phy_maint, clause_22, 30);

View File

@ -121,8 +121,10 @@ macro_rules! register {
/// Define a 1-bit field of a register /// Define a 1-bit field of a register
#[macro_export] #[macro_export]
macro_rules! register_bit { macro_rules! register_bit {
($mod_name: ident, $name: ident, $bit: expr) => ( ($mod_name: ident, $(#[$outer:meta])* $name: ident, $bit: expr) => (
$(#[$outer])*
impl $mod_name::Read { impl $mod_name::Read {
#[allow(unused)]
pub fn $name(&self) -> bool { pub fn $name(&self) -> bool {
use bit_field::BitField; use bit_field::BitField;
@ -130,7 +132,9 @@ macro_rules! register_bit {
} }
} }
$(#[$outer])*
impl $mod_name::Write { impl $mod_name::Write {
#[allow(unused)]
pub fn $name(mut self, value: bool) -> Self { pub fn $name(mut self, value: bool) -> Self {
use bit_field::BitField; use bit_field::BitField;
@ -144,8 +148,10 @@ macro_rules! register_bit {
/// Define a multi-bit field of a register /// Define a multi-bit field of a register
#[macro_export] #[macro_export]
macro_rules! register_bits { macro_rules! register_bits {
($mod_name: ident, $name: ident, $type: ty, $bit_begin: expr, $bit_end: expr) => ( ($mod_name: ident, $(#[$outer:meta])* $name: ident, $type: ty, $bit_begin: expr, $bit_end: expr) => (
impl $mod_name::Read { impl $mod_name::Read {
#[allow(unused)]
$(#[$outer])*
pub fn $name(&self) -> $type { pub fn $name(&self) -> $type {
use bit_field::BitField; use bit_field::BitField;
@ -153,7 +159,10 @@ macro_rules! register_bits {
} }
} }
#[allow(unused)]
$(#[$outer])*
impl $mod_name::Write { impl $mod_name::Write {
#[allow(unused)]
pub fn $name(mut self, value: $type) -> Self { pub fn $name(mut self, value: $type) -> Self {
use bit_field::BitField; use bit_field::BitField;
@ -170,8 +179,10 @@ macro_rules! register_bits {
/// definition must be annotated with `#[repr($bit_type)]`! /// definition must be annotated with `#[repr($bit_type)]`!
#[macro_export] #[macro_export]
macro_rules! register_bits_typed { macro_rules! register_bits_typed {
($mod_name: ident, $name: ident, $bit_type: ty, $type: ty, $bit_begin: expr, $bit_end: expr) => ( ($mod_name: ident, $(#[$outer:meta])* $name: ident, $bit_type: ty, $type: ty, $bit_begin: expr, $bit_end: expr) => (
impl $mod_name::Read { impl $mod_name::Read {
#[allow(unused)]
$(#[$outer])*
pub fn $name(&self) -> $type { pub fn $name(&self) -> $type {
use bit_field::BitField; use bit_field::BitField;
@ -181,6 +192,8 @@ macro_rules! register_bits_typed {
} }
impl $mod_name::Write { impl $mod_name::Write {
#[allow(unused)]
$(#[$outer])*
pub fn $name(mut self, value: $type) -> Self { pub fn $name(mut self, value: $type) -> Self {
use bit_field::BitField; use bit_field::BitField;
@ -196,6 +209,7 @@ macro_rules! register_bits_typed {
macro_rules! register_at { macro_rules! register_at {
($name: ident, $addr: expr, $ctor: ident) => ( ($name: ident, $addr: expr, $ctor: ident) => (
impl $name { impl $name {
#[allow(unused)]
pub fn $ctor() -> &'static mut Self { pub fn $ctor() -> &'static mut Self {
let addr = $addr as *mut Self; let addr = $addr as *mut Self;
unsafe { &mut *addr } unsafe { &mut *addr }

View File

@ -1,5 +1,3 @@
#![allow(unused)]
use core::fmt; use core::fmt;
use volatile_register::RW; use volatile_register::RW;

View File

@ -62,41 +62,56 @@ register_bit!(control, sttbrk, 7);
register_bit!(control, stpbrk, 8); register_bit!(control, stpbrk, 8);
register!(mode, Mode, RW, u32); register!(mode, Mode, RW, u32);
register_bits_typed!(mode,
/// Channel mode: Defines the mode of operation of the UART. /// Channel mode: Defines the mode of operation of the UART.
register_bits_typed!(mode, chmode, u8, ChannelMode, 8, 9); chmode, u8, ChannelMode, 8, 9);
register_bits_typed!(mode,
/// Number of stop bits /// Number of stop bits
register_bits_typed!(mode, nbstop, u8, StopBits, 6, 7); nbstop, u8, StopBits, 6, 7);
register_bits_typed!(mode,
/// Parity type select /// Parity type select
register_bits_typed!(mode, par, u8, ParityMode, 3, 5); par, u8, ParityMode, 3, 5);
register_bits!(mode,
/// Character length select /// Character length select
register_bits!(mode, chrl, u8, 1, 2); chrl, u8, 1, 2);
register_bit!(mode,
/// Clock source select /// Clock source select
register_bit!(mode, clks, 0); clks, 0);
register!(baud_rate_gen, BaudRateGen, RW, u32); register!(baud_rate_gen, BaudRateGen, RW, u32);
register_bits!(baud_rate_gen, cd, u16, 0, 15); register_bits!(baud_rate_gen, cd, u16, 0, 15);
register!(channel_sts, ChannelSts, RO, u32); register!(channel_sts, ChannelSts, RO, u32);
register_bit!(channel_sts,
/// Transmitter FIFO Nearly Full /// Transmitter FIFO Nearly Full
register_bit!(channel_sts, tnful, 14); tnful, 14);
register_bit!(channel_sts,
/// Tx FIFO fill level is greater than or equal to TTRIG? /// Tx FIFO fill level is greater than or equal to TTRIG?
register_bit!(channel_sts, ttrig, 13); ttrig, 13);
register_bit!(channel_sts,
/// Rx FIFO fill level is greater than or equal to FDEL? /// Rx FIFO fill level is greater than or equal to FDEL?
register_bit!(channel_sts, flowdel, 12); flowdel, 12);
register_bit!(channel_sts,
/// Transmitter state machine active? /// Transmitter state machine active?
register_bit!(channel_sts, tactive, 11); tactive, 11);
register_bit!(channel_sts,
/// Receiver state machine active? /// Receiver state machine active?
register_bit!(channel_sts, ractive, 10); ractive, 10);
register_bit!(channel_sts,
/// Tx FIFO is full? /// Tx FIFO is full?
register_bit!(channel_sts, txfull, 4); txfull, 4);
register_bit!(channel_sts,
/// Tx FIFO is empty? /// Tx FIFO is empty?
register_bit!(channel_sts, txempty, 3); txempty, 3);
register_bit!(channel_sts,
/// Rx FIFO is full? /// Rx FIFO is full?
register_bit!(channel_sts, rxfull, 2); rxfull, 2);
register_bit!(channel_sts,
/// Rx FIFO is empty? /// Rx FIFO is empty?
register_bit!(channel_sts, rxempty, 1); rxempty, 1);
register_bit!(channel_sts,
/// Rx FIFO fill level is greater than or equal to RTRIG? /// Rx FIFO fill level is greater than or equal to RTRIG?
register_bit!(channel_sts, rxovr, 0); rxovr, 0);
register!(tx_rx_fifo, TxRxFifo, RW, u32); register!(tx_rx_fifo, TxRxFifo, RW, u32);
register_bits!(tx_rx_fifo, data, u32, 0, 31); register_bits!(tx_rx_fifo, data, u32, 0, 31);