(root)/
strace-6.5/
src/
lirc_ioctl.c
       1  /*
       2   * Copyright (c) 2022 Sean Young <sean@mess.org>
       3   *
       4   * SPDX-License-Identifier: LGPL-2.1-or-later
       5   */
       6  
       7  #include "defs.h"
       8  #include <linux/lirc.h>
       9  #include "xlat/lirc_features.h"
      10  #include "xlat/lirc_modes.h"
      11  
      12  int
      13  lirc_ioctl(struct tcb *const tcp, const unsigned int code,
      14  	   const kernel_ulong_t arg)
      15  {
      16  	unsigned int value;
      17  
      18  	switch (code) {
      19  	case LIRC_GET_FEATURES:
      20  	case LIRC_GET_SEND_MODE:
      21  	case LIRC_GET_REC_MODE:
      22  	case LIRC_GET_REC_RESOLUTION:
      23  	case LIRC_GET_MIN_TIMEOUT:
      24  	case LIRC_GET_MAX_TIMEOUT:
      25  	case LIRC_GET_LENGTH:
      26  	case LIRC_SET_SEND_MODE:
      27  	case LIRC_SET_REC_MODE:
      28  	case LIRC_SET_SEND_CARRIER:
      29  	case LIRC_SET_REC_CARRIER:
      30  	case LIRC_SET_SEND_DUTY_CYCLE:
      31  	case LIRC_SET_TRANSMITTER_MASK:
      32  	case LIRC_SET_REC_TIMEOUT:
      33  	case LIRC_SET_REC_TIMEOUT_REPORTS:
      34  	case LIRC_SET_MEASURE_CARRIER_MODE:
      35  	case LIRC_SET_REC_CARRIER_RANGE:
      36  	case LIRC_SET_WIDEBAND_RECEIVER:
      37  	case LIRC_GET_REC_TIMEOUT:
      38  		break;
      39  	default:
      40  		return RVAL_DECODED;
      41  	}
      42  
      43  	if (entering(tcp)) {
      44  		tprint_arg_next();
      45  		if (_IOC_DIR(code) == _IOC_READ)
      46  			return 0;
      47  	}
      48  
      49  	if (umove_or_printaddr(tcp, arg, &value))
      50  		return RVAL_IOCTL_DECODED;
      51  
      52  	tprint_indirect_begin();
      53  
      54  	switch (code) {
      55  	case LIRC_GET_FEATURES:
      56  		printflags(lirc_features, value, "LIRC_CAN_???");
      57  		break;
      58  	case LIRC_GET_SEND_MODE:
      59  	case LIRC_GET_REC_MODE:
      60  	case LIRC_SET_SEND_MODE:
      61  	case LIRC_SET_REC_MODE:
      62  		printxval(lirc_modes, value, "LIRC_MODE_???");
      63  		break;
      64  	case LIRC_SET_TRANSMITTER_MASK:
      65  		PRINT_VAL_X(value);
      66  		break;
      67  	default:
      68  		PRINT_VAL_U(value);
      69  		break;
      70  	}
      71  
      72  	tprint_indirect_end();
      73  
      74  	return RVAL_IOCTL_DECODED;
      75  }