drivers/net/fddi/skfp/fplustm.c
Source file repositories/reference/linux-study-clean/drivers/net/fddi/skfp/fplustm.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/fddi/skfp/fplustm.c- Extension
.c- Size
- 39497 bytes
- Lines
- 1485
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
h/types.hh/fddi.hh/smc.hh/supern_2.hlinux/bitrev.hlinux/etherdevice.h
Detected Declarations
function mac_get_tnegfunction mac_update_counterfunction registerfunction registerfunction init_ramfunction set_recvptrfunction set_txptrfunction init_rbcfunction init_rxfunction set_formac_tsyncfunction init_txfunction mac_counter_initfunction set_formac_addrfunction set_intfunction build_claim_beaconfunction build_claim_beaconfunction formac_rcv_restartfunction formac_tx_restartfunction enable_formacfunction disable_formacfunction mac_ring_upfunction mac2_irqfunction mac3_irqfunction formac_offlinefunction formac_onlinefunction init_fplusfunction init_macfunction config_muxfunction periodicallyfunction layerfunction sm_mac_get_tx_statefunction mac_get_mc_tablefunction DOWNCALLfunction DOWNCALLfunction DOWNCALLfunction mac_set_rx_modefunction rtm_irqfunction rtm_initfunction rtm_set_timerfunction smt_split_up_fifofunction formac_reinit_tx
Annotated Snippet
if (!k) { \
SMT_PANIC(smc,SMT_E0130, SMT_E0130_MSG) ; \
} \
}
#define CHECK_CAM() { unsigned int k = 10 ;\
while (!(inpw(FM_A(FM_AFSTAT)) & FM_DONE) && k) k--;\
if (!k) { \
SMT_PANIC(smc,SMT_E0131, SMT_E0131_MSG) ; \
} \
}
const struct fddi_addr fddi_broadcast = {{0xff,0xff,0xff,0xff,0xff,0xff}};
static const struct fddi_addr null_addr = {{0,0,0,0,0,0}};
static const struct fddi_addr dbeacon_multi = {{0x01,0x80,0xc2,0x00,0x01,0x00}};
static const u_short my_said = 0xffff ; /* short address (n.u.) */
static const u_short my_sagp = 0xffff ; /* short group address (n.u.) */
/*
* define my address
*/
#ifdef USE_CAN_ADDR
#define MA smc->hw.fddi_canon_addr
#else
#define MA smc->hw.fddi_home_addr
#endif
/*
* useful interrupt bits
*/
static const int mac_imsk1u = FM_STXABRS | FM_STXABRA0 | FM_SXMTABT ;
static const int mac_imsk1l = FM_SQLCKS | FM_SQLCKA0 | FM_SPCEPDS | FM_SPCEPDA0|
FM_STBURS | FM_STBURA0 ;
/* delete FM_SRBFL after tests */
static const int mac_imsk2u = FM_SERRSF | FM_SNFSLD | FM_SRCVOVR | FM_SRBFL |
FM_SMYCLM ;
static const int mac_imsk2l = FM_STRTEXR | FM_SDUPCLM | FM_SFRMCTR |
FM_SERRCTR | FM_SLSTCTR |
FM_STRTEXP | FM_SMULTDA | FM_SRNGOP ;
static const int mac_imsk3u = FM_SRCVOVR2 | FM_SRBFL2 ;
static const int mac_imsk3l = FM_SRPERRQ2 | FM_SRPERRQ1 ;
static const int mac_beacon_imsk2u = FM_SOTRBEC | FM_SMYBEC | FM_SBEC |
FM_SLOCLM | FM_SHICLM | FM_SMYCLM | FM_SCLM ;
static u_long mac_get_tneg(struct s_smc *smc)
{
u_long tneg ;
tneg = (u_long)((long)inpw(FM_A(FM_TNEG))<<5) ;
return (u_long)((tneg + ((inpw(FM_A(FM_TMRS))>>10)&0x1f)) |
0xffe00000L) ;
}
void mac_update_counter(struct s_smc *smc)
{
smc->mib.m[MAC0].fddiMACFrame_Ct =
(smc->mib.m[MAC0].fddiMACFrame_Ct & 0xffff0000L)
+ (u_short) inpw(FM_A(FM_FCNTR)) ;
smc->mib.m[MAC0].fddiMACLost_Ct =
(smc->mib.m[MAC0].fddiMACLost_Ct & 0xffff0000L)
+ (u_short) inpw(FM_A(FM_LCNTR)) ;
smc->mib.m[MAC0].fddiMACError_Ct =
(smc->mib.m[MAC0].fddiMACError_Ct & 0xffff0000L)
+ (u_short) inpw(FM_A(FM_ECNTR)) ;
smc->mib.m[MAC0].fddiMACT_Neg = mac_get_tneg(smc) ;
#ifdef SMT_REAL_TOKEN_CT
/*
* If the token counter is emulated it is updated in smt_event.
*/
TBD
#else
smt_emulate_token_ct( smc, MAC0 );
#endif
}
/*
* write long value into buffer memory over memory data register (MDR),
*/
static void write_mdr(struct s_smc *smc, u_long val)
{
CHECK_NPP() ;
MDRW(val) ;
}
Annotation
- Immediate include surface: `h/types.h`, `h/fddi.h`, `h/smc.h`, `h/supern_2.h`, `linux/bitrev.h`, `linux/etherdevice.h`.
- Detected declarations: `function mac_get_tneg`, `function mac_update_counter`, `function register`, `function register`, `function init_ram`, `function set_recvptr`, `function set_txptr`, `function init_rbc`, `function init_rx`, `function set_formac_tsync`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.