Home
last modified time | relevance | path

Searched refs:il (Results 1 – 43 of 43) sorted by relevance

/linux-4.1.27/drivers/net/wireless/iwlegacy/
D3945-mac.c106 il3945_get_antenna_flags(const struct il_priv *il) in il3945_get_antenna_flags() argument
108 struct il3945_eeprom *eeprom = (struct il3945_eeprom *)il->eeprom; in il3945_get_antenna_flags()
133 il3945_set_ccmp_dynamic_key_info(struct il_priv *il, in il3945_set_ccmp_dynamic_key_info() argument
143 if (sta_id == il->hw_params.bcast_id) in il3945_set_ccmp_dynamic_key_info()
150 spin_lock_irqsave(&il->sta_lock, flags); in il3945_set_ccmp_dynamic_key_info()
151 il->stations[sta_id].keyinfo.cipher = keyconf->cipher; in il3945_set_ccmp_dynamic_key_info()
152 il->stations[sta_id].keyinfo.keylen = keyconf->keylen; in il3945_set_ccmp_dynamic_key_info()
153 memcpy(il->stations[sta_id].keyinfo.key, keyconf->key, keyconf->keylen); in il3945_set_ccmp_dynamic_key_info()
155 memcpy(il->stations[sta_id].sta.key.key, keyconf->key, keyconf->keylen); in il3945_set_ccmp_dynamic_key_info()
157 if ((il->stations[sta_id].sta.key. in il3945_set_ccmp_dynamic_key_info()
[all …]
D4965-mac.c82 il4965_check_abort_status(struct il_priv *il, u8 frame_count, u32 status) in il4965_check_abort_status() argument
86 if (!test_bit(S_EXIT_PENDING, &il->status)) in il4965_check_abort_status()
87 queue_work(il->workqueue, &il->tx_flush); in il4965_check_abort_status()
100 il4965_rx_queue_reset(struct il_priv *il, struct il_rx_queue *rxq) in il4965_rx_queue_reset() argument
112 pci_unmap_page(il->pci_dev, rxq->pool[i].page_dma, in il4965_rx_queue_reset()
113 PAGE_SIZE << il->hw_params.rx_page_order, in il4965_rx_queue_reset()
115 __il_free_pages(il, rxq->pool[i].page); in il4965_rx_queue_reset()
133 il4965_rx_init(struct il_priv *il, struct il_rx_queue *rxq) in il4965_rx_init() argument
139 if (il->cfg->mod_params->amsdu_size_8K) in il4965_rx_init()
145 il_wr(il, FH49_MEM_RCSR_CHNL0_CONFIG_REG, 0); in il4965_rx_init()
[all …]
Dcommon.c45 _il_poll_bit(struct il_priv *il, u32 addr, u32 bits, u32 mask, int timeout) in _il_poll_bit() argument
51 if ((_il_rd(il, addr) & mask) == (bits & mask)) in _il_poll_bit()
84 _il_grab_nic_access(struct il_priv *il) in _il_grab_nic_access() argument
90 _il_set_bit(il, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ); in _il_grab_nic_access()
110 _il_poll_bit(il, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_VAL_MAC_ACCESS_EN, in _il_grab_nic_access()
114 val = _il_rd(il, CSR_GP_CNTRL); in _il_grab_nic_access()
117 _il_wr(il, CSR_RESET, CSR_RESET_REG_FLAG_FORCE_NMI); in _il_grab_nic_access()
126 il_poll_bit(struct il_priv *il, u32 addr, u32 mask, int timeout) in il_poll_bit() argument
132 if ((il_rd(il, addr) & mask) == mask) in il_poll_bit()
143 il_rd_prph(struct il_priv *il, u32 reg) in il_rd_prph() argument
[all …]
D4965.c48 il4965_verify_inst_sparse(struct il_priv *il, __le32 * image, u32 len) in il4965_verify_inst_sparse() argument
61 il_wr(il, HBUS_TARG_MEM_RADDR, i + IL4965_RTC_INST_LOWER_BOUND); in il4965_verify_inst_sparse()
62 val = _il_rd(il, HBUS_TARG_MEM_RDAT); in il4965_verify_inst_sparse()
79 il4965_verify_inst_full(struct il_priv *il, __le32 * image, u32 len) in il4965_verify_inst_full() argument
88 il_wr(il, HBUS_TARG_MEM_RADDR, IL4965_RTC_INST_LOWER_BOUND); in il4965_verify_inst_full()
95 val = _il_rd(il, HBUS_TARG_MEM_RDAT); in il4965_verify_inst_full()
118 il4965_verify_ucode(struct il_priv *il) in il4965_verify_ucode() argument
125 image = (__le32 *) il->ucode_boot.v_addr; in il4965_verify_ucode()
126 len = il->ucode_boot.len; in il4965_verify_ucode()
127 ret = il4965_verify_inst_sparse(il, image, len); in il4965_verify_ucode()
[all …]
D3945.c46 il3945_send_led_cmd(struct il_priv *il, struct il_led_cmd *led_cmd) in il3945_send_led_cmd() argument
56 return il_send_cmd(il, &cmd); in il3945_send_led_cmd()
118 il3945_disable_events(struct il_priv *il) in il3945_disable_events() argument
174 base = le32_to_cpu(il->card_alive.log_event_table_ptr); in il3945_disable_events()
180 disable_ptr = il_read_targ_mem(il, base + (4 * sizeof(u32))); in il3945_disable_events()
181 array_size = il_read_targ_mem(il, base + (5 * sizeof(u32))); in il3945_disable_events()
187 il_write_targ_mem(il, disable_ptr + (i * sizeof(u32)), in il3945_disable_events()
253 il3945_rs_next_rate(struct il_priv *il, int rate) in il3945_rs_next_rate() argument
257 switch (il->band) { in il3945_rs_next_rate()
265 if (!(il->_3945.sta_supp_rates & IL_OFDM_RATES_MASK) && in il3945_rs_next_rate()
[all …]
Dcommon.h46 #define IL_ERR(f, a...) dev_err(&il->pci_dev->dev, f, ## a)
47 #define IL_WARN(f, a...) dev_warn(&il->pci_dev->dev, f, ## a)
48 #define IL_INFO(f, a...) dev_info(&il->pci_dev->dev, f, ## a)
116 void (*callback) (struct il_priv *il, struct il_device_cmd *cmd,
428 int il_eeprom_init(struct il_priv *il);
429 void il_eeprom_free(struct il_priv *il);
430 const u8 *il_eeprom_query_addr(const struct il_priv *il, size_t offset);
431 u16 il_eeprom_query16(const struct il_priv *il, size_t offset);
432 int il_init_channel_map(struct il_priv *il);
433 void il_free_channel_map(struct il_priv *il);
[all …]
D4965.h46 void il4965_free_tfds_in_queue(struct il_priv *il, int sta_id, int tid,
50 void il4965_set_rxon_chain(struct il_priv *il);
53 int il4965_verify_ucode(struct il_priv *il);
56 void il4965_check_abort_status(struct il_priv *il, u8 frame_count, u32 status);
58 void il4965_rx_queue_reset(struct il_priv *il, struct il_rx_queue *rxq);
59 int il4965_rx_init(struct il_priv *il, struct il_rx_queue *rxq);
60 int il4965_hw_nic_init(struct il_priv *il);
61 int il4965_dump_fh(struct il_priv *il, char **buf, bool display);
63 void il4965_nic_config(struct il_priv *il);
66 void il4965_rx_queue_restock(struct il_priv *il);
[all …]
Ddebug.c35 il_clear_traffic_stats(struct il_priv *il) in il_clear_traffic_stats() argument
37 memset(&il->tx_stats, 0, sizeof(struct traffic_stats)); in il_clear_traffic_stats()
38 memset(&il->rx_stats, 0, sizeof(struct traffic_stats)); in il_clear_traffic_stats()
46 il_update_stats(struct il_priv *il, bool is_tx, __le16 fc, u16 len) in il_update_stats() argument
51 stats = &il->tx_stats; in il_update_stats()
53 stats = &il->rx_stats; in il_update_stats()
131 if (!debugfs_create_file(#name, mode, parent, il, \
235 struct il_priv *il = file->private_data; in il_dbgfs_tx_stats_read() local
250 il_get_mgmt_string(cnt), il->tx_stats.mgmt[cnt]); in il_dbgfs_tx_stats_read()
256 il_get_ctrl_string(cnt), il->tx_stats.ctrl[cnt]); in il_dbgfs_tx_stats_read()
[all …]
D3945.h78 struct il_priv *il; member
194 void il3945_rx_queue_reset(struct il_priv *il, struct il_rx_queue *rxq);
195 unsigned int il3945_fill_beacon_frame(struct il_priv *il,
197 int il3945_dump_nic_event_log(struct il_priv *il, bool full_log, char **buf,
199 void il3945_dump_nic_error_log(struct il_priv *il);
217 void il3945_hw_handler_setup(struct il_priv *il);
218 void il3945_hw_setup_deferred_work(struct il_priv *il);
219 void il3945_hw_cancel_deferred_work(struct il_priv *il);
220 int il3945_hw_rxq_stop(struct il_priv *il);
221 int il3945_hw_set_hw_params(struct il_priv *il);
[all …]
D4965-calib.c95 il4965_sens_energy_cck(struct il_priv *il, u32 norm_fa, u32 rx_enable_time, in il4965_sens_energy_cck() argument
120 const struct il_sensitivity_ranges *ranges = il->hw_params.sens; in il4965_sens_energy_cck()
122 data = &(il->sensitivity_data); in il4965_sens_energy_cck()
292 il4965_sens_auto_corr_ofdm(struct il_priv *il, u32 norm_fa, u32 rx_enable_time) in il4965_sens_auto_corr_ofdm() argument
299 const struct il_sensitivity_ranges *ranges = il->hw_params.sens; in il4965_sens_auto_corr_ofdm()
301 data = &(il->sensitivity_data); in il4965_sens_auto_corr_ofdm()
355 il4965_prepare_legacy_sensitivity_tbl(struct il_priv *il, in il4965_prepare_legacy_sensitivity_tbl() argument
393 il4965_sensitivity_write(struct il_priv *il) in il4965_sensitivity_write() argument
404 data = &(il->sensitivity_data); in il4965_sensitivity_write()
408 il4965_prepare_legacy_sensitivity_tbl(il, data, &cmd.table[0]); in il4965_sensitivity_write()
[all …]
D3945-debug.c33 il3945_stats_flag(struct il_priv *il, char *buf, int bufsz) in il3945_stats_flag() argument
38 le32_to_cpu(il->_3945.stats.flag)); in il3945_stats_flag()
39 if (le32_to_cpu(il->_3945.stats.flag) & UCODE_STATS_CLEAR_MSK) in il3945_stats_flag()
43 (le32_to_cpu(il->_3945.stats.flag) & in il3945_stats_flag()
46 (le32_to_cpu(il->_3945.stats.flag) & in il3945_stats_flag()
55 struct il_priv *il = file->private_data; in il3945_ucode_rx_stats_read() local
67 if (!il_is_alive(il)) in il3945_ucode_rx_stats_read()
81 ofdm = &il->_3945.stats.rx.ofdm; in il3945_ucode_rx_stats_read()
82 cck = &il->_3945.stats.rx.cck; in il3945_ucode_rx_stats_read()
83 general = &il->_3945.stats.rx.general; in il3945_ucode_rx_stats_read()
[all …]
D3945-rs.c155 struct il_priv *il __maybe_unused = rs_sta->il; in il3945_rate_scale_flush_wins()
187 struct il_priv *il __maybe_unused = rs_sta->il; in il3945_bg_rate_scale_flush()
261 struct il_priv *il __maybe_unused = rs_sta->il; in il3945_collect_tx_data()
334 il3945_rs_rate_init(struct il_priv *il, struct ieee80211_sta *sta, u8 sta_id) in il3945_rs_rate_init() argument
336 struct ieee80211_hw *hw = il->hw; in il3945_rs_rate_init()
337 struct ieee80211_conf *conf = &il->hw->conf; in il3945_rs_rate_init()
344 if (sta_id == il->hw_params.bcast_id) in il3945_rs_rate_init()
351 rs_sta->il = il; in il3945_rs_rate_init()
381 il->_3945.sta_supp_rates = sta->supp_rates[sband->band]; in il3945_rs_rate_init()
385 il->_3945.sta_supp_rates <<= IL_FIRST_OFDM_RATE; in il3945_rs_rate_init()
[all …]
D4965-rs.c141 static void il4965_rs_rate_scale_perform(struct il_priv *il,
145 static void il4965_rs_fill_link_cmd(struct il_priv *il,
353 il4965_rs_tl_turn_on_agg_for_tid(struct il_priv *il, struct il_lq_sta *lq_data, in il4965_rs_tl_turn_on_agg_for_tid() argument
381 il4965_rs_tl_turn_on_agg(struct il_priv *il, u8 tid, struct il_lq_sta *lq_data, in il4965_rs_tl_turn_on_agg() argument
385 il4965_rs_tl_turn_on_agg_for_tid(il, lq_data, tid, sta); in il4965_rs_tl_turn_on_agg()
497 il4965_rate_n_flags_from_tbl(struct il_priv *il, struct il_scale_tbl_info *tbl, in il4965_rate_n_flags_from_tbl() argument
643 il4965_rs_use_green(struct il_priv *il, struct ieee80211_sta *sta) in il4965_rs_use_green() argument
646 !il->ht.non_gf_sta_present; in il4965_rs_use_green()
672 il4965_rs_get_adjacent_rate(struct il_priv *il, u8 idx, u16 rate_mask, in il4965_rs_get_adjacent_rate() argument
738 struct il_priv *il = lq_sta->drv; in il4965_rs_get_lower_rate() local
[all …]
D4965-debug.c37 il4965_stats_flag(struct il_priv *il, char *buf, int bufsz) in il4965_stats_flag() argument
42 flag = le32_to_cpu(il->_4965.stats.flag); in il4965_stats_flag()
62 struct il_priv *il = file->private_data; in il4965_ucode_rx_stats_read() local
76 if (!il_is_alive(il)) in il4965_ucode_rx_stats_read()
90 ofdm = &il->_4965.stats.rx.ofdm; in il4965_ucode_rx_stats_read()
91 cck = &il->_4965.stats.rx.cck; in il4965_ucode_rx_stats_read()
92 general = &il->_4965.stats.rx.general; in il4965_ucode_rx_stats_read()
93 ht = &il->_4965.stats.rx.ofdm_ht; in il4965_ucode_rx_stats_read()
94 accum_ofdm = &il->_4965.accum_stats.rx.ofdm; in il4965_ucode_rx_stats_read()
95 accum_cck = &il->_4965.accum_stats.rx.cck; in il4965_ucode_rx_stats_read()
[all …]
/linux-4.1.27/crypto/
Dcamellia_generic.c357 #define CAMELLIA_F(xl, xr, kl, kr, yl, yr, il, ir, t0, t1) ({ \ argument
358 il = xl ^ kl; \
360 t0 = il >> 16; \
368 ^ camellia_sp3033[(u8)(il >> 8)] \
369 ^ camellia_sp4404[(u8)(il)]; \
561 u32 il, ir, t0, t1, w0, w1; in camellia_setup128() local
618 w0, w1, il, ir, t0, t1); in camellia_setup128()
622 kll, klr, il, ir, t0, t1); in camellia_setup128()
626 krl, krr, il, ir, t0, t1); in camellia_setup128()
630 w0, w1, il, ir, t0, t1); in camellia_setup128()
[all …]
Dvmac.c66 #define ADD128(rh, rl, ih, il) \ argument
68 u64 _il = (il); \
DKconfig685 <http://www.cs.technion.ac.il/~biham/Reports/Tiger/>.
/linux-4.1.27/arch/powerpc/platforms/cell/spufs/
Dspu_save_crt0.S76 il $0, 0
77 il $SP, 16368
Dspu_restore_crt0.S42 il $0, 0
43 il $SP, 16368
/linux-4.1.27/sound/usb/usx2y/
Dusb_stream.c378 int il, ol, l, p; in loop_back() local
395 il = id[p].actual_length; in loop_back()
396 if (l + il > s->period_size) in loop_back()
397 il = s->period_size - l; in loop_back()
398 if (il <= ol) { in loop_back()
399 memcpy(o, i, il); in loop_back()
400 o += il; in loop_back()
401 ol -= il; in loop_back()
406 memcpy(o, i + ol, il - ol); in loop_back()
407 o += il - ol; in loop_back()
[all …]
/linux-4.1.27/Documentation/virtual/kvm/
Dnested-vmx.txt234 Abel Gordon, abelg <at> il.ibm.com
235 Nadav Har'El, nyh <at> il.ibm.com
236 Orit Wasserman, oritw <at> il.ibm.com
237 Ben-Ami Yassor, benami <at> il.ibm.com
238 Muli Ben-Yehuda, muli <at> il.ibm.com
243 Michael Factor, factor <at> il.ibm.com
244 Zvi Dubitzky, dubi <at> il.ibm.com
/linux-4.1.27/drivers/cpufreq/
Dpmac64-cpufreq.c485 u64 max_freq, min_freq, ih, il; in g5_pm72_cpufreq_init() local
582 il = *((u32 *)(eeprom + 0x20)); in g5_pm72_cpufreq_init()
585 if (il == ih) { in g5_pm72_cpufreq_init()
593 if (ih != 0 && il != 0) in g5_pm72_cpufreq_init()
594 min_freq = (max_freq * il) / ih; in g5_pm72_cpufreq_init()
/linux-4.1.27/net/bluetooth/bnep/
Dcore.c427 int len = 0, il = 0; in bnep_tx_frame() local
437 iv[il++] = (struct kvec) { &type, 1 }; in bnep_tx_frame()
452 iv[il++] = (struct kvec) { eh->h_source, ETH_ALEN }; in bnep_tx_frame()
457 iv[il++] = (struct kvec) { eh->h_dest, ETH_ALEN }; in bnep_tx_frame()
463 iv[il++] = (struct kvec) { skb->data, skb->len }; in bnep_tx_frame()
468 len = kernel_sendmsg(sock, &s->msg, iv, il, len); in bnep_tx_frame()
/linux-4.1.27/tools/power/cpupower/po/
Dit.po230 msgstr "Impossibile determinare il numero di CPU (%s: %s), assumo sia 1\n"
389 " il modulo cpufreq *\n"
413 " -d, --driver Determina il modulo cpufreq del kernel in uso *\n"
419 " -p, --policy Mostra il gestore cpufreq attualmente in uso *\n"
507 "con il valore 0\n"
553 " -d FREQ, --min FREQ la nuova frequenza minima che il gestore cpufreq "
562 " -u FREQ, --max FREQ la nuova frequenza massima che il gestore cpufreq "
577 " È necessario che il gestore userspace sia "
599 "con il valore 0\n"
639 "- Stai provando a impostare una specifica frequenza ma il gestore\n"
[all …]
Dfr.po215 msgstr "Veuillez rapportez les erreurs et les bogues � %s, s'il vous plait.\n"
532 msgstr "analyse du CPU %d impossible puisqu'il ne semble pas �tre pr�sent\n"
/linux-4.1.27/drivers/scsi/
Du14-34f.c1579 unsigned int ihdlr, unsigned int il[], unsigned int n_ready) { in reorder() argument
1604 k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt; in reorder()
1638 if (!((rev && r) || (!rev && s))) sort(sl, il, n_ready, rev); in reorder()
1641 k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt; in reorder()
1650 if (overlap) sort(pl, il, n_ready, FALSE); in reorder()
1665 k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt; in reorder()
1682 unsigned int k, n, n_ready = 0, il[MAX_MAILBOXES]; in flush_dev() local
1694 il[n_ready++] = k; in flush_dev()
1697 if (reorder(j, cursec, ihdlr, il, n_ready)) n_ready = 1; in flush_dev()
1700 k = il[n]; cpp = &HD(j)->cp[k]; SCpnt = cpp->SCpnt; in flush_dev()
Deata.c2099 unsigned int ihdlr, unsigned int il[], unsigned int n_ready) in reorder() argument
2126 k = il[n]; in reorder()
2172 sort(sl, il, n_ready, rev); in reorder()
2176 k = il[n]; in reorder()
2192 sort(pl, il, n_ready, 0); in reorder()
2221 k = il[n]; in reorder()
2243 unsigned int k, n, n_ready = 0, il[MAX_MAILBOXES]; in flush_dev() local
2259 il[n_ready++] = k; in flush_dev()
2262 if (reorder(ha, cursec, ihdlr, il, n_ready)) in flush_dev()
2266 k = il[n]; in flush_dev()
/linux-4.1.27/arch/arm/boot/dts/
Dimx6q-cm-fx6.dts4 * Author: Valentin Raevsky <valentin@compulab.co.il>
Dcx92755_equinox.dts4 * Author: Baruch Siach <baruch@tkos.co.il>
Dcx92755.dtsi4 * Author: Baruch Siach <baruch@tkos.co.il>
/linux-4.1.27/drivers/net/ethernet/dec/tulip/
Dde2104x.c1792 struct de_srom_info_leaf *il; in de21041_get_srom_info() local
1822 il = (struct de_srom_info_leaf *) &ee_data[ofs]; in de21041_get_srom_info()
1825 if (il->n_blocks == 0) in de21041_get_srom_info()
1828 (sizeof(struct de_srom_info_leaf) + (sizeof(struct de_srom_media_block) * il->n_blocks))) in de21041_get_srom_info()
1832 switch (get_unaligned(&il->default_media)) { in de21041_get_srom_info()
1854 bufp = ((void *)il) + sizeof(*il); in de21041_get_srom_info()
1855 for (i = 0; i < il->n_blocks; i++) { in de21041_get_srom_info()
/linux-4.1.27/arch/mips/pci/
Dops-tx3927.c187 tx3927_pcicptr->il = TX3927_IR_PCI; in tx3927_pcic_setup()
/linux-4.1.27/drivers/dma/
Dste_dma40.c509 struct d40_interrupt_lookup *il; member
1671 struct d40_interrupt_lookup *il = base->gen_dmac.il; in d40_handle_interrupt() local
1678 regs[i] = readl(base->virtbase + il[i].src); in d40_handle_interrupt()
1692 if (il[row].offset == D40_PHY_CHAN) in d40_handle_interrupt()
1695 d40c = base->lookup_log_chans[il[row].offset + idx]; in d40_handle_interrupt()
1706 writel(BIT(idx), base->virtbase + il[row].clr); in d40_handle_interrupt()
1710 if (!il[row].is_error) in d40_handle_interrupt()
1714 chan, il[row].offset, idx); in d40_handle_interrupt()
3267 base->gen_dmac.il = il_v4b; in d40_hw_detect_init()
3282 base->gen_dmac.il = il_v4a; in d40_hw_detect_init()
/linux-4.1.27/arch/mips/include/asm/txx9/
Dtx3927.h87 endian_def_b4(ml, mg, ip, il);
/linux-4.1.27/
D.mailmap58 James Bottomley <jejb@titanic.il.steeleye.com>
DCREDITS330 E: muli@il.ibm.com
2744 E: gadio@netvision.net.il
2755 E: orc@pell.chi.il.us
DMAINTAINERS952 M: Mike Rapoport <mike@compulab.co.il>
993 M: Baruch Siach <baruch@tkos.co.il>
2385 M: Muli Ben-Yehuda <muli@il.ibm.com>
/linux-4.1.27/Documentation/hwmon/
Dlm9337 A "0" configures the VID pins for V(ih) = 2.1V min, V(il) = 0.8V max.
38 A "1" configures the VID pins for V(ih) = 0.8V min, V(il) = 0.4V max.
/linux-4.1.27/drivers/block/
Dfloppy.c2091 int il; in setup_format_params() local
2127 il = 1; in setup_format_params()
2129 il++; in setup_format_params()
2141 n = (n + il) % F_SECT_PER_TRACK; in setup_format_params()
/linux-4.1.27/Documentation/ide/
DChangeLog.ide-cd.1994-2004131 * 4.02 Dec 01, 1996 -- Applied patch from Gadi Oxman <gadio@netvision.net.il>
/linux-4.1.27/arch/mips/include/asm/octeon/
Dcvmx-pci-defs.h530 uint32_t il:8; member
532 uint32_t il:8;
Dcvmx-pciercx-defs.h577 uint32_t il:8; member
579 uint32_t il:8;
/linux-4.1.27/Documentation/filesystems/
Dcoda.txt194 22.. SSeerrvviicciinngg CCooddaa ffiilleessyysstteemm ccaallllss
358 33..11.. IImmpplleemmeennttaattiioonn ddeettaaiillss