gsm_control_modem(9)
β¨ gsm_control_modem(9) β¨
okay so bestie, we're in the Kernel API Manual today and this page is all about gsm_control_modem β that's our little function. let's get into it π
π NAME π
gsm_control_modem β modem status received π
like, the modem literally slid into our DMs. that's the whole function. iconic.
πΈ SYNOPSIS πΈ
void gsm_control_modem (struct gsm_mux *gsm , const u8 *data , int clen );
no return value, no drama, just vibes and three arguments π«Ά
π¦ ARGUMENTS π¦
gsmβ the GSM channel π this is the mux we're working with, our main character.dataβ data following command π the actual payload bytes that came after the command byte.clenβ command length β how many bytes we're dealing with here.
π DESCRIPTION π
okay so picture this: we have received a modem status control message π that's the situation. and this thing is used by the GSM mux protocol to pass virtual modem line status β and optionally to indicate break signals π₯
so what we do is: unpack it, convert to Linux representation, and β if need be β stuff a break message down the tty π that's it. that's the job. no cap.
ngl the "if need be" is doing a lot of heavy lifting there, so like⦠pay attention to it 𫢠the break-message stuffing is conditional, not automatic.
π§ SEE ALSO π§
first up, the kernel file itself, bestie β go read it, it's right here: ./drivers/tty/n_gsm.c π
and now the extended friend group, because this function does not travel alone π (all (9) manual pages, obviously):
- fcs / ea / encode girlies:
gsm_fcs_add(9),gsm_fcs_add_block(9),gsm_read_ea(9),gsm_read_ea_val(9),gsm_encode_modem(9),gsm_encode_params(9) - device registry besties:
gsm_register_devices(9),gsm_unregister_devices(9) - packet + frame squad:
gsm_print_packet(9),gsm_stuff_frame(9),gsm_send(9),gsm_data_alloc(9),gsm_send_packet(9),gsm_is_flow_ctrl_msg(9) - queue / kick crew:
gsm_dlci_clear_queues(9),gsm_data_kick(9),__gsm_data_queue(9),gsm_data_queue(9),gsm_dlci_data_sweep(9),gsm_dlci_data_kick(9),gsm_kick_timer(9) - response + command duo:
gsm_response(9),gsm_command(9) - dlci data output crew:
gsm_dlci_data_output(9),gsm_dlci_data_output_framed(9),gsm_dlci_modem_output(9) - control message family:
gsm_control_command(9),gsm_control_reply(9),gsm_control_negotiation(9),gsm_control_rls(9),gsm_control_message(9),gsm_control_response(9),gsm_control_keep_alive(9),gsm_control_transmit(9),gsm_control_retransmit(9),gsm_control_send(9),gsm_control_wait(9) - modem + negotiation processors:
gsm_process_modem(9),gsm_process_negotiation(9) - dlci lifecycle squad:
gsm_dlci_close(9),gsm_dlci_open(9),gsm_dlci_negotiate(9),gsm_dlci_t1(9),gsm_dlci_begin_open(9),gsm_dlci_set_opening(9),gsm_dlci_set_wait_config(9),gsm_dlci_begin_close(9),gsm_dlci_data(9),gsm_dlci_command(9),gsm_dlci_config(9),gsm_dlci_copy_config_values(9),gsm_dlci_alloc(9),gsm_dlci_free(9),gsm_dlci_release(9) - receive state checkers, our hyper-vigilant icons:
gsm0_receive_state_check_and_fix(9),gsm0_receive(9),gsm1_receive_state_check_and_fix(9),gsm1_receive(9) - queue + error + mux management:
gsm_queue(9),gsm_error(9),gsm_cleanup_mux(9),gsm_activate_mux(9),gsm_free_mux(9),gsm_free_muxr(9),gsm_alloc_mux(9) - the gsmld collective:
gsmld_output(9),gsmld_write_trigger(9),gsmld_write_task(9),gsmld_attach_gsm(9),gsmld_detach_gsm(9),gsmld_flush_buffer(9),gsmld_close(9),gsmld_open(9),gsmld_write_wakeup(9),gsmld_read(9),gsmld_write(9),gsmld_poll(9) - modem update crew, our direct coworkers basically:
gsm_modem_upd_via_data(9),gsm_modem_upd_via_msc(9),gsm_modem_update(9),gsm_wait_modem_change(9)
that's the whole page, bestie π you ate that. this one lives over in ./drivers/tty, dated October 2026, and it's filed under gsm_control_modem(9) β slay, go read the source, periodt πβ¨π¦πΈ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms